【PE结构】5.导入表

一、前言
二、PE整体结构
三、DOS头
四、NT头
五、区段头
六、导出表

七、导入表

八、资源表
九、其他表


1.概念

导入 是PE文件(EXE)在运行时,使用到了其他PE文件(DLL)中的函数、变量、类等这样的行为。
导入表 存储的是从其他PE文件(DLL)导入过来的函数名、序号。在加载到内存后,还存储这些函数的地址。
导入表结构 导入表是一个结构体数组,最后以一个结构体大小的全零元素结尾。每一个数组元素代表一个PE文件的导入信息。

PE文件(EXE)通常需要多个PE文件(DLL)的支持,所以导入表一般有多个。

2.导入表定位

前面提到的 NT头->扩展头->数据目录表->第个元素->相对虚拟地址(RVA)
还用010Editor打开百度云盘看一下
这里写图片描述
从扩展头里的数据,我们就可以得到导入表的定位信息RVA

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PE文件格式中的导入(import table)信息存储在可执行文件的数据目录中,具体来说是存储在`IMAGE_DIRECTORY_ENTRY_IMPORT`目录项中。该目录项的值可以在PE文件的NT头中找到,NT头是PE文件格式中的一个结构体,包含了PE文件的各种信息,包括数据目录的位置和大小等信息。 NT头的结构体定义如下: ``` typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; ``` 其中,`OptionalHeader`成员是一个结构体类型,它包含了PE文件的各种信息,包括数据目录的位置和大小等信息。`OptionalHeader`结构体定义如下: ``` typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; ``` 其中,`DataDirectory`是一个数组,它包含了PE文件的各个数据目录项的位置和大小等信息。导入信息就存储在`IMAGE_DIRECTORY_ENTRY_IMPORT`目录项中,它是`DataDirectory`数组的第5个元素,可以通过以下代码找到导入的位置和大小: ``` PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + pDosHeader->e_lfanew); PIMAGE_DATA_DIRECTORY pImportTable = &pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; DWORD dwImportTableSize = pImportTable->Size; DWORD dwImportTableVA = pImportTable->VirtualAddress; ``` 其中,`pDosHeader`是指向PE文件DOS头的指针。`dwImportTableVA`是导入在内存中的虚拟地址,`dwImportTableSize`是导入的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值