Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
3-922
Sashka4000
2002-06-08 16:42
2002.07.01
Много данных из одного запроса


3-873
_dron_
2002-06-05 15:17
2002.07.01
Как настроить драйвер по кодировке для доступа ADO->Paradox


3-901
DKalinin
2002-06-07 14:36
2002.07.01
Помогите! Какую ошибку перехватывать при открытии ADOquery надо?


1-969
VDen
2002-06-20 09:19
2002.07.01
Открытие формы в D5


8-1107
Unplugged_in_NY
2002-02-22 08:02
2002.07.01
прозрачный битмап





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский