码迷,mamicode.com
首页 > 其他好文 > 详细

pe | pe文件导出表

时间:2021-02-10 12:55:56      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ber   cte   res   ddr   date   ons   direct   str   typedef   

导出表

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

在扩展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(导出表的开始编号) --> 函数地址表的偏移

pe | pe文件导出表

标签:ber   cte   res   ddr   date   ons   direct   str   typedef   

原文地址:https://www.cnblogs.com/Mz1-rc/p/14392679.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!