2015-10-17 7 views
1

Я пытаюсь прочитать PE-файл в C. У меня есть код MZ, а затем, я не знаю, код e_lfanew.Чтение файлов PE в C

#include <stdio.h> 
    #include <Windows.h> 

    int main() 
    { 
     errno_t err; 
     FILE *fp = NULL; 
     char *buffer; 
     err = fopen_s(&fp, "D:\\pe.exe", "rb"); 
     printf("----------dos header---------- \n"); 
     buffer = new char[3]; // malloc: cap phat bo nho// 
     memset(buffer, 0x0, sizeof(char)* 3);  // memset: gan gia tri cho buffer// 
     fread(buffer, 2 * sizeof(char), 1, fp); 
     printf("e_magic: %s \n", buffer); 
    } 

Кроме того, я знаю, что это возможно через Win32 API; однако я хочу учиться на этом и делать это сам.

ответ

0

Обычно можно определить структуру DOS_Header и прочитать полную структуру из файла. Это структура, то есть поле e_lfanew, которые непосредственно могут быть доступны без указателей арифметике и т.д.

e_lfanew затем указывает на подпись PE (PE\0\0), за которым следует заголовок COFF. Затем повторяется история: создайте структуру, называемую COFF_Header, и прочитайте полную структуру из файла ...

0

Как @thomas weller сказал, что вам нужно привести ваш буфер в IMAGE_DOS_HEADER.

В последнем поле указывается, где находится PE-заголовок, затем прочитайте это смещение и введите буфер в IMAGE_NT_HEADER. Другой способ состоит в том, чтобы просто отобразить файл и отобразить соответствующую память буферов.

0

Чтобы получить информацию о любой информации заголовка, вы можете непосредственно ее заполнить, например, ` IMAGE_DOS_HEADER imgDosHdr = {0};

FILE * fp = fopen ("Path_to_Pe", "rb");

if (fp == NULL) return;

fseek (fp, 0, SEEK_SET);

fread (& imgDosHdr, 1, sizeof (IMAGE_DOS_HEADER), fp);

fclose (fp); следовательно, вы можете получить все детали заголовка PE-файла, установив fseek.

 Смежные вопросы

  • Нет связанных вопросов^_^