//得到导入表的信息:导入库名,导入函数ID,导入函数地址
void CPe32 ::GetImportTableInfo()
{
if (m_bSuccess)
{
//空结尾的导入表结构成员
IMAGE_IMPORT_DESCRIPTOR zero = {0};
//得到导入目录结构
IMAGE_DATA_DIRECTORY ImportDataDirectory = m_pPeHeader->OptionalHeader.DataDirectory[1];
if (ImportDataDirectory .VirtualAddress == 0)
{ //不含有导入表直接返回
return ;
}
//获得导入表在PE文件中的位置
DWORD dwImportInFilePos = GetFileOffsetFromRva(ImportDataDirectory .VirtualAddress);
if (dwImportInFilePos > m_iFileSize) //判断导入表的位置是否合法
{
return ;
}
//得到文件中导入表结构指针,有多少个DLL,则导入表中有多少个成员
IMAGE_IMPORT_DESCRIPTOR *pImportDescriptor =
( IMAGE_IMPORT_DESCRIPTOR *)((BYTE *)m_pFileBuffer + dwImportInFilePos);
int iDllNum = 0;
//pImportDescriptor是导入表中IMAGE_IMPORT_DESCRIPTOR结构体数组的首地址。
while (1)
{
//取得导入库名称字符串所在文件中的位置
DWORD dwDllNameInFilePos = GetFileOffsetFromRva(pImportDescriptor->Name);
if (dwDllNameInFilePos == -1 ||
dwDllNameInFilePos > m_iFileSize) //检测得到的文件偏移是否合法
{ //第一个导入库名称位置不合法,停止导入表的解析
if (iDllNum == 0)
{
return ;
PE解析导入表--实例
最新推荐文章于 2024-07-25 17:47:24 发布
本文深入探讨了PE文件格式中的导入表,解释了导入表的作用,详细解析了其结构,并通过实例展示了如何读取和理解导入表信息。内容包括DLL导入、函数指针解析等关键概念。
摘要由CSDN通过智能技术生成