Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.1.136] |
|
Сообщ.
#1
,
|
|
|
Прога должна проверять является данный файл PE-файлом. Использую следующий код:
[code] HANDLE File = CreateFile("c:\\3.exe", GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //Открываем файл HANDLE Mapping = CreateFileMapping( File,0,PAGE_READONLY,0,0,0 ); //Создаем адресное пространство из файла LPVOID WinINI = MapViewOfFile( Mapping,FILE_MAP_READ,0,0,0 ); //Резервируем регион if((char*)WinINI==IMAGE_DOS_SIGNATURE)MessageBox(NULL,"ДОС заголовк верный","Проверка",MB_ICONINFORMATION); <-----Я вообще переделываю исходник с асмы на C++. И вот не могу понять как организовать проверку :-( По идеи WinINI в данный момент это указатель на начало файла. UnmapViewOfFile(WinINI); CloseHandle(Mapping); CloseHandle(File); [\code] По идее если DOS-заголовок верный, то используем значение параметра e_lfanew, чтобы найти PE-заголовок, т.е в нем хранится смещение PE-заголовка от начала файла. Вопрос: как узнать значение e_lfanew. Большое спасибо... |
Сообщ.
#2
,
|
|||
|
Верная сигнатура, вроде как, в досе была из двух букв. Да еще и в двух вариантах: 'MZ' и 'ZM', но про второй "забыли"
|
Сообщ.
#3
,
|
|
|
А каким образо в один экзешник зашивают два? Вернее зашить то не проблема, а как сделать чтобы два файла запустились?
Спасибо... |
Сообщ.
#4
,
|
|
|
А таким, что загрузчик Win32, ПЕРЕД тем как запустить DOS-программу, смотрит, а не лежит ли по смещению e_lfanew правильный заголовок PE(NE). И если лежит, то загружает его...
|
Сообщ.
#5
,
|
|
|
Все спасибо уже понял. Можно просто еще добавить свою секцию и сменить адресс EntryPoint и все будет OK.
|