|
Шаг 25 - IMAGE_FILE_HEADER.
В прошлом шаге мы получили ссылку на структуру PIMAGE_NT_HEADERS, которая включает две структуры. Одна из них IMAGE_FILE_HEADER. Вот так ее мы получим.
............
if ( pPEHeader->Signature != IMAGE_NT_SIGNATURE )
{
MessageBox(NULL,"Error PE Header signature PE","Error",MB_OK);
return FALSE;
}
IMAGE_FILE_HEADER FileHeader;
FileHeader=(IMAGE_FILE_HEADER) pPEHeader->FileHeader;
return TRUE;
}
Что находится в этой структуре ??? Вот ее описание.
typedef struct _IMAGE_FILE_HEADER
{
USHORT Machine;
USHORT NumberOfSections;
ULONG TimeDateStamp;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
USHORT SizeOfOptionalHeader;
USHORT Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
#define IMAGE_SIZEOF_FILE_HEADER 20
Последнее определение - это ее размер. Что мешает сделать нам sizeof я не понимаю. Наверно лучше этим размером не пользоваться. Первое поле Machine говорит нам о том, для какого процессора программа. Что там может быть ??? Ну например
Intel
MIPS
Alpha
IBM PowerPC
и так далее.
Вот мы и проверим.
........
IMAGE_FILE_HEADER FileHeader;
FileHeader=(IMAGE_FILE_HEADER) pPEHeader->FileHeader;
if (FileHeader.Machine!=IMAGE_FILE_MACHINE_I386)
{
MessageBox(NULL,"Error Not 386 Proccesor","Error",MB_OK);
return FALSE;
}
return TRUE;
}
Отсюда напрашивается интересный вывод. У меня стоит Windows 98 на процессоре Pentium 200MMX. А операционная система скомпилирована для команд 386. Значит она не использует новые классные команды процессора Pentium. То есть ядро операционной системы их не использует. Следующее поле это NumberOfSections. Это количество заголовков сегментов в исполнимом файле. Сегменты расположены в файле последовательно и это число позволяет опеределить когда они закончатся. В поле TimeDateStamp находится время создания модуля компоновщиком. Только это время хитрое. Это число секунд, которые прошли от полночи 1 января, 1970, по Greenwich (Англия). Поле Characteristics содержит признак наличия отладочной информации. Дело в том, что отладочная информация может находиться как в самом PE файле, так и в отдельном .DBG или вообще ее может на быть. Все это описано в этом поле.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|