| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Шаг 24 - PIMAGE_NT_HEADERS.

В прошлом шаге мы научились получать заголовок MS DOS. За ним следует MS DOS Stub, то есть заглушка MS DOS, а за ней PE заголовок, который описывается структурой PIMAGE_NT_HEADERS. Для того, чтобы добраться до PE заголовка в структуре MS DOS есть поле со смещением до этого заголовка.
typedef struct _IMAGE_DOS_HEADER 
{ 
    .............
    LONG   e_lfanew;        // адрес в файле нового .exe заголовка (PE)
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
Нам надо научиться вычислять смещение до этого заголовка. Создадим для этого макрос.
#define NTSIGNATURE(a) ((LPVOID)((BYTE *)a + ((PIMAGE_DOS_HEADER)a)->e_lfanew))
И получим заголовок PE.
// TestAPI.cpp : Defines the entry point for the application.
//

	..........
	if ( pDOSHead->e_magic != IMAGE_DOS_SIGNATURE ) 
	{
		MessageBox(NULL,"Error Dos Header signature MZ","Error",MB_OK);
		return FALSE;
	}

	PIMAGE_NT_HEADERS pPEHeader;
	pPEHeader=(PIMAGE_NT_HEADERS) NTSIGNATURE(pDOSHead);

	return TRUE;
}
Теперь нужно проверить сигнатуру, что это заголовок именно PE.
	if ( pPEHeader->Signature != IMAGE_NT_SIGNATURE ) 
	{
		MessageBox(NULL,"Error PE Header signature PE","Error",MB_OK);
		return FALSE; 
	}
Давайте посмотрим, что еще есть в этой структуре.
typedef PIMAGE_NT_HEADERS32                 PIMAGE_NT_HEADERS;

typedef struct _IMAGE_NT_HEADERS 
{
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
Как видите первое поле это сигнатура, которая должна быть PE, а потом ссылка еще на две структуры.
Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz