У меня проблемы с заголовками Win32 NT, которые дают мне странные RVA для имен импорта.Вот соответствующий код, который вызывает у меня проблему:
//Get a pointer to the import table
PIMAGE_IMPORT_DESCRIPTOR piidImportTableAddr;
piidImportTableAddr = (PIMAGE_IMPORT_DESCRIPTOR)(pImgNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress + (DWORD)pMemFile);
while(piidImportTableAddr->Name != 0)
{
//Itterate over every IMAGE_IMPORT_DESCRIPTOR structure, extracting the names of the DLLs to import
char* name = (char*)((DWORD)piidImportTableAddr->Name + (DWORD)pMemFile);
//Do nothing for now
piidImportTableAddr++;
}
Однако члены структуры piidImportTableAddr содержат адреса с плохими указателями, вот таблица членов:
Characteristics 0x42746553
OriginalFirstThunk 0x42746553
TimeDateStamp 0x646f4d6b
ForwarderChain 0x02260065
Name 0x54746547
FirstThunk 0x4d747865
Это все плохие RVA и области памяти.Есть ли что-то, что я делаю неправильно при поиске имени DLL этим методом?Я сравнил RVA таблицы импорта с той, которая показана в PE Lord, они одинаковые, поэтому я не уверен, почему значения IMAGE_IMPORT_DESCRIPTOR неверны.
Вот ссылка на исходный код целиком: http://pastebin.com/32MBEvWU