pe | pe文件导出表

导出表

如何定位导出表(这段写的不是很清楚)

在扩展pe头的最后一个成员(16个结构体*8bytes)中查找
导出表的属性在第一个结构体中:
第一个DWORD是导出表的RVA,要先转化成FOA
然后就可以找到导出表结构体

关键结构体:_IMAGE_EXPORT_DIRECTORY

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;

重要的有三张表:

  1. 函数地址表

  2. 函数名称表

  3. 序号表(2bytes)

    序号表里的成员个数等于函数名称表里的成员个数

查找函数的原理:

API函数:

FARPROC GetProcessAddress(
	HMODULE HModule,    //dll模块句柄
    LPCSTR lpProcName    // 函数名
);

查找过程:

  1. 函数名称表 - 第0个 --> 序号表 - 第0个 --> 序号表第0个的值是4 --> 查函数地址表第4个的位置 === 找到函数
  2. 通过序号查找,序号-Base(导出表的开始编号) --> 函数地址表的偏移
posted @ 2021-02-09 13:33  Mz1  阅读(195)  评论(0编辑  收藏  举报