C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Нетология

 25 - IMAGE_FILE_HEADER / Win 32 API / Win32 API

Шаг 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 или вообще ее может на быть. Все это описано в этом поле.


| |
Автор Каев Артем.
[AD]





Letyshops [lifetime]