【发布时间】:2012-01-05 07:41:21
【问题描述】:
我遇到了 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_DESCRIPTORs 不正确。
这里是完整源代码的链接:http://pastebin.com/32MBEvWU
【问题讨论】:
标签: c++ winapi portable-executable