2012-03-29 1 views
0

Я пытаюсь прочитать раздел .pdata x64 exe. Я собираю файл в память, находя раздел .pdata, а затем я использую его PointerToRawData для получения фактических данных раздела ...
Но тогда мой указатель «pdata» указывает на незаконный адрес: (
Это то, что я делаю:?.чтение необработанных данных раздела PE32 +

void* mappingHandle = CreateFileMapping(fileHandle, 
        NULL, 
        PAGE_READONLY, 
        0, 
        1, 
        NULL); 
char* fileMemory = (char*)MapViewOfFile(mappingHandle, FILE_MAP_READ, 0, 0, 1); 
IMAGE_DOS_HEADER* dosHeader = (IMAGE_DOS_HEADER*)fileMemory; 
IMAGE_SECTION_HEADER* pdataSectionHeader = NULL; 
if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE) // "MZ" signature 
{ 
    IMAGE_NT_HEADERS* ntHeaders = (IMAGE_NT_HEADERS*)(fileMemory + dosHeader->e_lfanew); 
    if (ntHeaders->Signature == IMAGE_NT_SIGNATURE) // Supposed to be "PE" 
    { 
     unsigned int sectionCount = ntHeaders->FileHeader.NumberOfSections; 
     IMAGE_SECTION_HEADER* sectionHeaders = IMAGE_FIRST_SECTION(ntHeaders); 
     pdataSectionHeader = sectionHeaders + 3; // Going to .pdata section. 
    } 
} 
unsigned long pdataSize = pdataSectionHeader->SizeOfRawData; 
char* pdata = fileMemory + pdataSectionHeader->PointerToRawData; 

может кто-нибудь сказать мне, что я делаю неправильно

ответ

0

проблема заключалась в том, как я отображенной файл в память
я должен был сделать это таким образом:

void* mappingHandle = CreateFileMapping(fileHandle, 
        NULL, 
        PAGE_READONLY, 
        0, 
        0, //Here: 0 instead of 1 
        NULL); 
Смежные вопросы