PE文件结构(四) 输出表

PE文件结构(四) 输出表

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

PE文件结构(四)

參考

书:《加密与解密》

视频:小甲鱼 解密系列 视频

输出表

一般来说输出表存在于dll中。输出表提供了 文件里函数的名字跟这些函数的地址, PE装载器通过输出表来改动IAT。

IMAGE_OPTIONAL_HEADER中的 DataDirectory[0] 提供了输出表的RVA。输出表是以一个IMAGE_EXPORT_DIRECTORY结构 開始的。

IMAGE_EXPORT_DIRECTORY结构:

typedef struct _IMAGE_EXPORT_DIRECTORY {    DWORD   Characteristics;         //未使用    DWORD   TimeDateStamp;           //文件生成的时间    WORD    MajorVersion;            //主版本。一般为0    WORD    MinorVersion;            //次版本,一般为0    DWORD   Name;                    //指向dll名的RVA    DWORD   Base;                    // 基数,一般为 1 (就是从1数起)    DWORD   NumberOfFunctions;       // AddressOfFunctions指向的数组的元素的个数    DWORD   NumberOfNames;           // AddressOfNames 指向的数组的元素的个数    DWORD   AddressOfFunctions;     // 函数地址数组ENT的RVA    DWORD   AddressOfNames;         // 函数名字数组EAT的RVA     DWORD   AddressOfNameOrdinals;  // 输出序列号数组的RVA,这个数组是以WORD为单位的,用来函数名字数组连接函数地址数组的} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

输出表主要就是来给PE载入器改动IAT的,即查找函数的入口地址。PE载入器查找函数的地址有两种方法,从序号查找,从函数名查找。

1. 从序号查找函数入口地址

    PE载入器通过INT知道了序号。直接用这个序号 去找 函数地址数组EAT就能够了。

2. 从函数名查找函数入口地址

    通过函数名,查找函数名数组ENT,找到这个函数名在数组中的序号 n(从0数起),然后取输出序列号数组的第n个值(从0数起)。

然后 以这个值为序号的的函数地址数组EAT的值就是这个函数的入口地址。

即 ENT[  输出序列号数组[n]  ] 

实例分析:

比如找user32.dll 中AdjustWindowRect 这个函数。

先查看user32.dll的二进制文件。它的IMAGE_OPTIONAL_HEADER结构为:

图片1

PE文件结构(四) 输出表

从中能够知道:

Name: RVA 55C0h          文件偏移值:49C0h  
Base: 1
NumberOfFunctions: 02DCh  
NumberOfNmae:02DCh
AddressOfFunctions:  RVA 3928h         文件偏移值:2D28h
AddressOfNames:  RVA 4498h             文件偏移值:3898h
AddressOfNameOrdinals: RVA 5008h        文件偏移值:4408h

查看ENT数组所指向的字符串。能够知道AdjustWindowRect是第2个元素。

所以。查看AddressOfNameOrdinals所指向的输出序列号数组的第2个元素,能够发现值为 1。

图片2

PE文件结构(四) 输出表

再查看EAT中序号为1的元素(即第2个元素)值为021140h,这个就是AdjustWindowRect函数的RVA。

图片3

PE文件结构(四) 输出表

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117367.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月6日 下午8:00
下一篇 2022年1月6日 下午8:00


相关推荐

  • xcopy-参数详解

    xcopy-参数详解XCOPY——目录复制命令 1.功能:复制指定的目录和目录下的所有文件连同目录结构。 2.类型:外部命令 3.格式:XCOPY[源盘:]〈源路径名〉[目标盘符:][目标

    2022年7月1日
    28
  • 前后端分离开发模式介绍

    前后端分离开发模式介绍1 1 什么是前后端分离前后端分离是目前一种非常流行的开发模式 它使项目的分工更加明确 后端 负责处理 存储数据前端 负责显示数据前端和后端开发人员通过接口进行数据的交换 1 2 为什么要进行前后端分离前后端可以身心愉快地专注于各自擅长的领域避免后端写前端代码 基本上 1 天时间 20 写后端代码 80 写页面 前端配置后端代码运行环境 简直是要疯 装一堆环境 而且有些开发环境是 windows 前端是 macos 装环境就要装好几天 避免前后端打架 推诿 甩锅 提高开发效率分

    2026年2月25日
    3
  • OpenClaw + MCP:让 AI 助手连接任意工具的终极方案

    OpenClaw + MCP:让 AI 助手连接任意工具的终极方案

    2026年3月14日
    2
  • 双重求和∑matlab_求和∑的性质

    双重求和∑matlab_求和∑的性质目录一、复习求和符号∑二、二重求和的定义三、双重求和∑∑交换求和顺序一、复习求和符号∑    自从约瑟夫·傅立叶于1820年引入求和符号∑(大写的希腊字母sigma)以来,求和∑以及双重求和∑∑在数学公式推导,命题证明中被经常使用,掌握它的定义和性质对于提高我们的数学能力是必不可少的。注意我们在此只讨论有限项的求和。结合律:∑i=1n(ai+b…

    2022年10月12日
    4
  • 使用npm安装依赖,尽量别使用cnpm,会漏掉很多依赖的

    使用npm安装依赖,尽量别使用cnpm,会漏掉很多依赖的

    2021年10月11日
    55
  • hive优化大全-一篇就够了[通俗易懂]

    hive优化大全-一篇就够了[通俗易懂]1.概述  在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题。下面开始本篇文章的优化介绍。2.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题?数据量大不是问题,数据倾斜是个问题。jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长。原因是mapreduce作业初始化的时间是…

    2022年4月20日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号