Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
4 / 111 / 0
Регистрация: 17.06.2013
Сообщений: 1,530
1

Как отличать Dos 16 Exe от Dos 32 Exe

04.05.2016, 02:16. Просмотров 974. Ответов 6
Метки нет (Все метки)

Давно уже интересовал вот этот вопрос как именно отличать
Dos 16 Exe от Dos 32 Exe. Если я правильно понял Com по умолчанию всегда написан на 16-разрядном ассемблере. А EXE бывают разного типа, и как в них разбираться? Может есть какая то программа?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2016, 02:16
Ответы с готовыми решениями:

Assembler:DOS/Debug.exe
Как написать код для видео памятьи о виводе изображение,напишите какие то примеры.

16 bit MS-DOS Subsystem: Dllhost.exe
Добрый день. Записывал файлы с чужого харда, на следующий день антивирус (ESET Smart Security)...

16 bit ms-dos subsystem taskeng.exe
У меня такая проблема,после загрузки виндовс выскакивает такое окно с надписью(ранее такого не...

16 bit MS-DOS Subsystem: Dllhost.exe
Добрый день, при попытке открыть фотографию или при нажатии на любую папку в прводнике вылетает...

6
Модератор
6684 / 3261 / 1308
Регистрация: 01.02.2015
Сообщений: 10,344
Записей в блоге: 1
04.05.2016, 09:34 2
На каком этапе выяснить тип Dos 16 Exe и Dos 32 Exe?
Если просто при просмотре - откройте 32-exe в Hex-редакторе. Там будет заголовок типа
Код
MZ  .     ' яя  `.  T       stub.h generated from stub.asm by djasm,
on Wed Jun 28 11:15:04 2000
The STUB.EXE stub loader is Copyright (C) 1993-1995 DJ Delorie. 
Permission granted to use for any purpose provided this copyright 
remains present and unmodified. 
This only applies to the stub, and not necessarily the whole program.

$Id: stub.asm built 06/28/100 11:15:04 by djasm $

@(#) stub.asm built 06/28/100 11:15:04 by djasm

.                                                                     go32stub, v 2.02T
      .      @          CWSDPMI.EXE
В глаза бросаются слова "заглушка" stub и название расширителя DPMI - в данном случае CWSDPMI.EXE.

Кроме того, при запуске DOS 32 EXE требуется наличие расширителя (например, CWSDPMI.EXE) или в текущем каталоге или в одном из перечисленных в переменной окружения PATH. Без расширителя такая прога запускаться не будет.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5401 / 3235 / 2375
Регистрация: 22.11.2013
Сообщений: 9,129
04.05.2016, 16:55 3
ФедосеевПавел,
вместо заглушки там может быть вполне полноценная программа.

По смещению 60 ($3E) может быть адрес PE заголовка.
https://ru.wikipedia.org/wiki/.EXE
https://en.wikibooks.org/wiki/... able_Files

Это может быть и не PE файл.

Добавлено через 4 минуты
Если из особенностей формата только специфичный код в точке входа, вызывающий экстендер, то иных вариантов, кроме сбора сигнатур не видно.
Причем, бинарник может быть дополнительно упакован, скажем, UPX.
2
Модератор
6684 / 3261 / 1308
Регистрация: 01.02.2015
Сообщений: 10,344
Записей в блоге: 1
04.05.2016, 18:16 4
Прочитал о вариациях EXE для DOS. Увидел всего два подходящих для DOS формата - MZ и NE. В DOS я пробовал силы на tasm, masm, TurboPascal 1/2/3/4/5/6/7, TurboC 3, FreePascal 2.2.2. Частоиспользуемые программы, шрифты (*.CPX в FreeDOS) особенно на устаревших компах с 15-25 летним возрастом, упаковывал UPX'ом.
Какие впечатления остались от просмотров заголовков:
- При беглом осмотре, 16-битный EXE после TurboPascal имеет нечитаемый глазами заголовок.
- Если его упаковать UPX, LzExe или чем либо ещё (их около 10 самых распространённых) - где-то в самом начале видно название упаковщика.
- Если это 32-битный EXE с экстендером - видны слова stub и название экстендера. Опять же, экстендеров всего с 10.
- При упаковке 32-битного DOS приложения, на виду остаётся "заглушка" и где-то дальше название пакера - проверял только UPX, но тенденция должна сохраниться для совместимости не DOS программ.
- Если запускать Win32 приложения в DOS при помощи HX DOS Extender, то приложения - самые настоящие Windows'кие. Мне удавалось запускать некоторые консольные.

О формате NE ничего не скажу - он всё равно начинается с сигнатуры MZ и без пристального внимания остаётся незамеченным. Возможно, что masm и MS QuickC создавали такие exe.

Отвечая на вопрос ТС - если рассортировывать "на глазок", то достаточно того, что я описал.
0
4 / 111 / 0
Регистрация: 17.06.2013
Сообщений: 1,530
14.05.2016, 07:38  [ТС] 5
Ну спасибо. Однако думалось что заголовок PE присутствует только в Windows EXE. Однако самому приходилось видеть Dos EXE исполььзующие DLL. Сам использовал 32 Dos EXE скомпилированные на TMT 3, Проверяя их работоспособность вне системы, работало исправно. С помощью загрузочного CD.
0
4 / 111 / 0
Регистрация: 17.06.2013
Сообщений: 1,530
16.05.2016, 04:32  [ТС] 6
Заголовки NE и PE - по моему встречаются только в windows программах.
Если конечно под названными не подразумевается их некие неименованные дос аналоги... О существовании которых не знаю. Но по моему MZ заголовка для определения разрядности Exe было бы достаточно.

NE - Встречается по моему уже только в старых Windows программах. В отличае от PE которую как я понял собой подменяет.
Но на новых системах программы с NE как правило ведут себя не одекватно.

(Такие exe можно скомпилить Visual Basic или одной из разновидностей Windows Turbo pascal.)

Минимальный MZ заголовок может иметь размер менее 512 байт - 32 байта причём из них известно только 14 секций (по 2 байта) а что представляет собой 15-я неизвестно.

(Такой небольшой MZ Заголовок можно пришпандорить к com файлу с помощью программы ComExe Приобразующей com в exe).

Но это будет правильной длинны для exe 16 а не 32. Последнее чего под вопросом.


Что NE Что PE Встречаются в заголовках EXE файлов каждый раз на разном месте и определяются по местонахождению как то так:

На 4 строке некст редактора, читать её надо от конца строки
40 00 00 00 - по полученным мною точным сведениям она равна только 4 этим байтам представляет из себя числовую сноску местонахождения надписи PE..L - Только она указывает не позицию первого байта (P) А количество отступов до него, отсчёт начинается с первого байта файла.

Например числовая позиция местонахождения символа (P) равна 65

#65: s := '41';

А В файле записано что '40';

или числовая позиция местонахождения символа (P) равна 257

А В файле записано что '00 01 00 00';

Далее более кратко:
2305 = '00 09 00 00'; (256*9 = 2304)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5401 / 3235 / 2375
Регистрация: 22.11.2013
Сообщений: 9,129
16.05.2016, 13:32 7
Ixmil,
Смещения принято считать с 0, а не с 1, отсюда и разница.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.05.2016, 13:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Компиляция программ exe для DOS в MASM32
помогите разобраться как создавать программы в masm32 типа exe , можете дать код который точно...

Вот прицепился не могу полечить -16 bit ms-dos subsystem taskeng.exe the ntvdm cpu
Доброй ночи прицепился, не как не могу убрать: 16 bit ms-dos subsystem taskeng.exe the ntvdm cpu...

Как в DOS-BOX написать BAT-файл чтобы ЛЕГКО запустить DOS-программу ?
ВСЕМ ДОБРОГО ВРЕМЕНИ ! Надо на Windows_7 СРОЧНО запустить старую программу, написанную еще под DOS...

Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей перемещения в два параграфа
Такой вот вопрос. Какой компоновщик для DOS-16 делает заголовок EXE-файла с пустой таблицей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.