WindowsPE 第五章 导出表
导出表
PE中的导出表存在于动态链接库文件里。导出表的主要作用是将PE中存在的函数导出到外部,以便其他人可以使用这些函数,实现代码重用。
5.1导出表的作用
代码重用机制提供了重用代码的动态链接库,它会向调用者说明库里的哪些函数是可以被别人使用的,这些用来说明的信息便组成了导出表。导出表存在的位置不是绝对的,通常EXE文件中很少有导出表(也可以有),而大部分DLL文件中都有导出表。所以一提到导出表,很多时候第一反应就是动态链接库。
导出表的两个租用:
一是可以通过导出表分析不认识的动态链接库所能提供的功能。
二是向调用者提供输出函数指令在模块中的起始地址。
5.1.1 分析动态链接库功能
略。就是说可以根据导出表函数猜测动态库功能等。
5.1.2 获得导出函数地址
对于一个动态链接库里导出的函数的调用,既可以通过函数名称来进行,也可以通过函数在导出表的索引来进行。Windows加载器将与进程相关的DLL加载到虚拟地址空间以后,会根据导入表中登记的与该动态链接库相关的由INT指向的名称或者编号来遍历DLL所在虚拟地址空间,通过函数名称或编号查找导出表结构,从而确定该到处函数在虚拟地址空间中的起始VA,并将该VA覆盖导入表的IAT相关项。
在覆盖IAT的过程中,导出表起到了参照和指引的作用。如果一个动态链接库没有定义导出表,其内部包含的所有函数都无法被其他程序透明的调用。这里所述的透明是指公开调用。如果是掌握动态链接库的内部编码,及时没有导出表,也可以随意引用里面的函数,哪怕这些函数是私有的。之后会说这个相关(5.5.2)。
5.2 含导出表的PE文件
为了方便说明,我还是自己创建一个DLL吧,用C++写吧,书上是用汇编写的。
5.3 导出表数据结构
5.3.1 导出表定位
导出表数据为数据目录中注册的数据类型之一,其描述信息位于数据目录第一个目录相中。
导出表所在地址RVA=0x00003A10
导出表数据大小 =0x000000061
再看这个
上面导出表RAV是0x3a10 大小0x61 应该是落在.radata的区间里了,也就是说这个导出表在.rdata里。
同时根据RVA-FOR转换可得到导出表数据所在文件偏移地址为:2010
5.3.2 导出目录IMAGE_EXPORT_DIRECTORY
导出数据的第一个结构是IMAGE_EXPORT_DIRECTORY。该结构详细定义如下:
导入表的IMAGE_IMPORT_EDSCRIPTOP个数与调用的动态链接库个数相等,而导出表的IMAGE_EXPORT_DIRECTORY只有一个。
5.3.3 导出表实例分析
下面以上面的那个动态链接库为例,进行PE文件导出表结构分析。
文件导出表节内容如下:
56 3a 00 00
对应IMAGE_EXPORT_DIRECTORY.Name字段,指向文件偏移0x00002056。对应的值为字符串DLLTest.dll,是动态链接库的名字。
01 00 00 00
对应IMAGE_EXPORT_DIRECTORY.nBase字段,表示起始编号为1。
03 00 00 00
对应IMAGE_EXPORT_DIRECTORY.NumberOfFunctions字段,表示有4个导出函数。
03 00 00 00
表示三个导出函数均是按照名称导出。
38 3A 00 00
对应IMAGE_EXPORT_DIRECTORY.AddressOfFunctions字段。从该位置去除连续3个地址,这些地址分别对应3个函数的RVA。
RVA:3A38 ---> FOA:2038
44 3A 00
对应IMAGE_EXPORT_DIRECTORY.AddressOfName字段。从该位置获取处的连续3个地址依次为:
RVA:3A44 ---> FOR:2044
和书上不一样,目前这个2044开始的不是三个函数名字,而是三个函数名字的地址,要据需往下找一层才能找到:
50 3A 00 00
对应IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals字段。从该位置去除的连续3个单子索引依次为:0 1 2
WindowsPE 第五章 导出表相关推荐
- WindowsPE 第五章 导出表编程-1(枚举导出表)
导出表编程-1-枚举导出表 开始前先回忆一下导出表: 1.枚举dll函数的导出函数名字: 思路: (1)加载dll到内存里. (2)获取PE头,逐步找到可选头部. (3)然后找到里面的第一个结构(导出 ...
- PE学习(五)导出表,编写DLL及查看DLL的导出信息
第五章 导出表 typedef struct _IMAGE_NT_HEADERS { +00h DWORD Signature +04h IMAGE_FILE_HEADER FileHeader +1 ...
- 王道考研 计算机网络笔记 第五章:传输层
本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...
- 数字图像处理——第五章 图像复原与重建
数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...
- c语言逐步搜索法求有根区间,[C语言第五章.ppt
[C语言第五章 算法举例 基本思想是,根据提出的问题,列举所有可能的情况,并 用问题中给定的条件检验哪些是需要的,哪些是不需要的. 教学进程 列举与试探 列举法常用于解决"是否存在" ...
- 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章
资料来源: <智能优化算法以及matlab实现>包子阳 余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...
- Linux内核分析——第五章 系统调用
第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...
- 2021 线性代数 第五章 习题课
第5章 实对称矩阵与二次型 5.1 实对称矩阵的对角化(基础部分) 5.1 实对称矩阵的对角化(提高部分) 5.2 二次型及标准形(基础部分) 5.2 二次型及标准形(提高部分) 5.3 正定二次型与 ...
- java十五章_java:第十五章
第十五章 字符串1.字符串(String)的定义 String str="内容"; String str=new String(); //内容为null String str=ne ...
最新文章
- Python str类型方法实例概述及常用方法——04
- 重理工c语言实验指导书答案,常熟理工学院 C语言程序设计实验实验指导书及答案...
- elementui :on-remove怎么用_Vue + Vuex + Element UI实现动态全局主题颜色
- 还在为多集群管理烦恼吗?RedHat 和蚂蚁、阿里云给开源社区带来了OCM
- myeclipse中代码提示和编辑区颜色设置
- Linux文件和目录权限笔记
- tp5连接mysql数据库_TP5的链接数据库
- java将当前页面隐藏,java 如何将当前程序隐藏到任务栏(类似windows上的其他程序)...
- 2022危险化学品生产单位安全生产管理人员考试题库及在线模拟考试
- dbv oracle驱动,Oracle的DBV工具
- python getcwd_python – 执行os.getcwd()时出错?
- practice是什么意思_practice是什么意思 还有practice的用法
- 计算机停车管理系统界面,智慧停车管理系统-智慧停车整体解决方案
- 不止ChatGPT,谷歌云 AI 方案早已厉兵秣马!
- 什么是多态?为什么用多态?有什么好处?[转]
- ExtJS教程(3)--- Ext中类的使用
- 运维必备的DevOps工具链大盘点
- 网络子系统45_ip协议tos处理
- 【算法练习】蓝桥杯训练一:区间k大数查询、最大最小公倍数、k好数
- 洛谷3964 松鼠聚会