Форум: "Система";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
ВнизКак узнать тип 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 вся ветка
Форум: "Система";
Текущий архив: 2002.07.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c