【2021.01.14】导出表

如何定位导出表?

  1. 在扩展PE头(IMAGE_OPTIONAL_HEADER)的最后一个结构体成员有16张表(导出表、导入表、资源表等)。
  2. 所以能从其中找到IMAGE_DIRECTORY_ENTRY_EXPORT(其中存放了导出表的位置)。

导出表结构

typedef struct _IMAGE_EXPORT_DIRECTORY {
    DWORD   Characteristics;
    DWORD   TimeDateStamp;
    WORD    MajorVersion;
    WORD    MinorVersion;
    DWORD   Name;
    DWORD   Base;
    DWORD   NumberOfFunctions;
    DWORD   NumberOfNames;
    DWORD   AddressOfFunctions;     // RVA from base of image
    DWORD   AddressOfNames;         // RVA from base of image
    DWORD   AddressOfNameOrdinals;  // RVA from base of image
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
成员说明
Characteristics未使用
TimeDateStamp时间戳
MajorVersion未使用
MinorVersion未使用
Name指向该导出表文件名字符串
Base导出函数起始序号
NumberOfFunctions所有导出函数的个数
NumberOfNames以函数名字导出的函数个数
AddressOfFunctions导出函数地址表RVA
AddressOfNames导出函数名称表RVA
AddressOfNameOrdinals导出函数序号表RVA

定位导出表

首先找到扩展PE头

  1. 扩展PE头的最后一个成员是一个结构体数组,数组中有16个成员也就是16张表,每个结构体宽度是8个字节。
  2. 导出表就在第一个结构体中。
  3. 从后往前数8行,每行16个字节,每个结构体宽度是8个字节。

找到导出表

  1. 导出表真正的位置由前4个字节决定。
  2. 导出表真正的数据一共有多少由后4个字节决定。
  3. 注意这里是RVA,如果内存对齐和文件对齐不同,需要将RVA转换为FOV。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值