![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать тип exe-шника?
ser111 © (2002-03-31 18:54:00)А как узнать, exe-шник виндосовский или досовский. Я тут подумал, что проверка сигнатуры MZ и PE вроде недостаточна. Например, если exe-шник чисто досовский, то там PE может встретиться например, в каком-нибудь стринге. Может есть какие API-функции для этого?
paul_shmakov (2002-04-03 13:30:00) [1]2 ser111:
"А кстати, никто не пробовал ради интереса если разделить exe-шник на MZ и PE, отдельно PE часть запустится под виндой?
"
нет, запускаться не будет. формат pe обязывает наличие dos-stub.
ser111 (2002-04-03 11:15:00) [2]To Alex_LG ©
Да не, ты просто вопрос не так понял. Я и имел в виду узнать, exe-шник чисто дросовский (MZ) или виндосовский (MZ+PE). Под словом "виндосовский" я именно его (MZ+PE) и понимал. Я просто думал, может есть какая API функция, чтоб не париться с внутренними форматами...
А кстати, никто не пробовал ради интереса если разделить exe-шник на MZ и PE, отдельно PE часть запустится под виндой?
Alex_LG (2002-04-03 02:51:00) [3]но тогда вообще постановка вопроса (сабж) некорректна! получается, что нет ЧИСТО виндовых ехе-шников? соответственно - и узнать тип невозможно. по крайней мере надо дать более чёткое определение вопросу
paul_shmakov (2002-04-02 11:55:00) [4]2 Alex_LG:
как верно подметил Pat, там может быть все, что угодно. в начале любого pe-файла записан обычный dos exe-шник. обычно он ничего полезного не делает, а просто выводит фразу "This program ...". но там может быть и любой другой dos exe-шник, который будет выполнять что-то полезное. например, scandisk.exe раньше был два в одном - он запучкался и под dos в текстовом режиме, и под windows в графическом.
вы можете легко разделить pe-файл на два (dos и собственно pe-часть), а потом обратно их вместе собрать (например, заменив dos часть) вручную или программой dexem (поставляется вместе с hiew).
Pat (2002-04-01 23:41:00) [5]This program must be run under Win32
Alex_LG (2002-04-01 21:23:00) [6]ну так а по этому "This programm cannot be run in DOS mode" не узнать что ли?
paul_shmakov (2002-04-01 14:17:00) [7]2 Song:
да бросьте! извиняться еще :) форум для того и есть - век живи, век учись.
Song (2002-04-01 13:10:00) [8]2paul_shmakov © (01.04.02 13:05)
Извините, не знал. Программист я, не кодер.
paul_shmakov (2002-04-01 13:05:00) [9]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 11:31:00) [10]"то там PE может встретиться например, в каком-нибудь стринге"
Проверять-то надо только первые два байта.