-
-
[旧帖]
编写PE工具遇到问题,求助~(关于导入表的获取)
0.00雪花
-
-
[旧帖] 编写PE工具遇到问题,求助~(关于导入表的获取)
0.00雪花
这个问题好头疼啊,想不明白~~
描述:
PE文件通过文件映射到内存,所以我认为可以在文件中用文件偏移找导入表结构或者是在内存中根据基地址与RVA的和找导入表结构,通过学习和看了一些源码,看到不少都是用CFile类然后通过文件偏移找导入表结构,后面又看了加密解密第三版中的PE代码,发现它的思路好像是第二个,在内存中读取导入表结构。。但是
PIMAGE_IMPORT_DESCRIPTOR GetFirstImportDesc(LPVOID ImageBase)
{
PIMAGE_IMPORT_DESCRIPTOR pImportDesc;
pImportDesc=(PIMAGE_IMPORT_DESCRIPTOR)GetDirectoryEntryToData(ImageBase,IMAGE_DIRECTORY_ENTRY_IMPORT);
if(!pImportDesc)
return NULL;
return pImportDesc;
}
LPVOID GetDirectoryEntryToData(LPVOID ImageBase,USHORT DirectoryEntry)
{
DWORD dwDataStartRVA;
LPVOID pDirData=NULL;
PIMAGE_NT_HEADERS pNtH=NULL;
PIMAGE_OPTIONAL_HEADER pOH=NULL;
pNtH=GetNtHeaders(ImageBase);
if(!pNtH)
return NULL;
pOH=GetOptionalHeader(ImageBase);
if(!pOH)
return NULL;
dwDataStartRVA=pOH->DataDirectory[DirectoryEntry].VirtualAddress;
if(!dwDataStartRVA)
return NULL;
pDirData=RvaToPtr(pNtH,ImageBase,dwDataStartRVA
);//就是这边,还是找了文件偏移 if(!pDirData)
return NULL;
return pDirData;
}
我非常不理解,从内存直接找导入表结构为什么不能直接用PE加载的基地址+导入表的RVA来获取需要的导入表的起始内存呢,为什么这边的导入表RVA被转化成了文件偏移了?看了KSSD,找到一篇文章描述的和我认识相同的
求解惑啊~~
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)