Вниз
Скачать: CL | DM;

Как узнать тип exe-шника?   Найти похожие ветки 

← →
ser111   (2002-03-31 18:54) [0]

А как узнать, exe-шник виндосовский или досовский. Я тут подумал, что проверка сигнатуры MZ и PE вроде недостаточна. Например, если exe-шник чисто досовский, то там PE может встретиться например, в каком-нибудь стринге. Может есть какие API-функции для этого?


← →
Song ©   (2002-04-01 11:31) [1]

"то там PE может встретиться например, в каком-нибудь стринге"
Проверять-то надо только первые два байта.


← →
paul_shmakov ©   (2002-04-01 13:05) [2]

2 Song:
"Проверять-то надо только первые два байта"
первые два байта файла? если так, то это неправильно. нужно считать dos-заголовок (см. структуру IMAGE_DOS_HEADER), проверить в нем первые два байта (поле e_magic) на предмет соответствия "MZ". это нам уже говорит, что это exe-шник, но пока не понятно - dos или windows.
точнее не так. любой windows exe-шник содержит в себе dos exe-шник, который при запуске из под дос говорит что-то типа "This programm cannot be run in DOS mode".
вторая же часть - это windows часть. причем форматы не ограничиваются только portable executable (PE), хотя он и самый распространненый.
в случае проверки на pe нужно из dos заголовка считать значение поля e_lfanew - это файловое смещение дополнительного заголовка. если оно равно нулю, то это dos exe-шник. считываем по этому смещению структуру. для pe это будет структура IMAGE_NT_HEADERS, проверяем в ней первые два байта (поле Signature) на соответствие "PE".


← →
Song ©   (2002-04-01 13:10) [3]

2paul_shmakov © (01.04.02 13:05)
Извините, не знал. Программист я, не кодер.


← →
paul_shmakov ©   (2002-04-01 14:17) [4]

2 Song:
да бросьте! извиняться еще :) форум для того и есть - век живи, век учись.


← →
Alex_LG ©   (2002-04-01 21:23) [5]

ну так а по этому "This programm cannot be run in DOS mode" не узнать что ли?


← →
Pat ©   (2002-04-01 23:41) [6]

This program must be run under Win32


← →
paul_shmakov ©   (2002-04-02 11:55) [7]

2 Alex_LG:
как верно подметил Pat, там может быть все, что угодно. в начале любого pe-файла записан обычный dos exe-шник. обычно он ничего полезного не делает, а просто выводит фразу "This program ...". но там может быть и любой другой dos exe-шник, который будет выполнять что-то полезное. например, scandisk.exe раньше был два в одном - он запучкался и под dos в текстовом режиме, и под windows в графическом.
вы можете легко разделить pe-файл на два (dos и собственно pe-часть), а потом обратно их вместе собрать (например, заменив dos часть) вручную или программой dexem (поставляется вместе с hiew).


← →
Alex_LG ©   (2002-04-03 02:51) [8]

но тогда вообще постановка вопроса (сабж) некорректна! получается, что нет ЧИСТО виндовых ехе-шников? соответственно - и узнать тип невозможно. по крайней мере надо дать более чёткое определение вопросу


← →
ser111   (2002-04-03 11:15) [9]

To Alex_LG ©
Да не, ты просто вопрос не так понял. Я и имел в виду узнать, exe-шник чисто дросовский (MZ) или виндосовский (MZ+PE). Под словом "виндосовский" я именно его (MZ+PE) и понимал. Я просто думал, может есть какая API функция, чтоб не париться с внутренними форматами...
А кстати, никто не пробовал ради интереса если разделить exe-шник на MZ и PE, отдельно PE часть запустится под виндой?


← →
paul_shmakov ©   (2002-04-03 13:30) [10]

2 ser111:
"А кстати, никто не пробовал ради интереса если разделить exe-шник на MZ и PE, отдельно PE часть запустится под виндой?
"
нет, запускаться не будет. формат pe обязывает наличие dos-stub.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.008 c
1-1045
BKV
2002-06-18 16:35
2002.07.01
Создание двух визуальных компонентов в дизайн-тайм.


1-1099
Виктор
2002-06-15 12:00
2002.07.01
Как форматировать текст в RichEdit по ширине?


14-1195
VAleksey
2002-05-31 17:48
2002.07.01
Помогите разобраться


3-858
VictorT
2002-06-06 11:02
2002.07.01
Первичный ключ.


3-869
Дмитрий Калугин
2002-06-06 17:27
2002.07.01
Пароль для Paradox




   Наверх