Windows PE 第四章 导入表

本文详细介绍了Windows PE中的导入表,它是PE文件中实现代码重用的关键部分。导入表包含了程序调用动态链接库函数的信息,系统在运行时会加载对应的动态链接库并修正函数地址。内容涉及导入函数、invoke指令分解、导入函数地址和导入表结构,包括导入表描述符、双桥结构、IAT等知识点。
摘要由CSDN通过智能技术生成

第四章 导入表

    导入表是PE数据组织中的一个很重要的组成部分,它是为实现代码重用而设置的。通过分析导入表数据,可以获得诸如OE文件的指令中调用了多少外来函数,以及这些外来函数都存在于哪些动态链接库里等信息。Windows加载器在运行PE时会将导入表中声明的动态链接库一并加载到进程的地址空间,并修正指令代码中调用的函数地址。在数据目录中一共有四种类型的数据与导入表数据有关: 导入表、导入函数地址表、绑定导入表、延迟加载导入表。

4.1何为导入表

    当程序调用了动态链接库的相关函数,在进行编译和链接的时候,编译程序和链接程序就会将调用的相关信息写入最终生成的PE文件中,以告诉操作系统这些函数的执行指令字节码从哪里能够获取。这些信息就是导入表所要描述的内容。

4.2导入函数

    程序开发者在基于汇编语言的源程序中,通过invoke指令调用用户自定义的函数,或者从其他动态链接库中导入的函数。

4.2.1  invoke指令分解

    在汇编语言中,程序一旦被编译,编译器会对invoke指令进行适当分解。分解后的指令中将会包含指向导入函数的地址的操作数。当PE文件被装载到内存中时,该操作数就会变成导入函数所在虚拟地址真实的VA

使用OD打开HelloWorld.exe程序,查看汇编后的字节码以及相关调用如下:

书上的OD结果:

 

自己本地C++写的一个的OD结果:

 

VS2012 反汇编结果:

 

以书上的为解释例子:

将原代码中两个导入函数MessageBoxAExitProcess的调用语句解释成字节码分别为:

 

从指令的反汇编代码中可以看出,以第一个调用为例,对invoke指令的分解操作包含以下三步:

1.压栈。即先将要调用的所有参数push到栈中。(反向顺序压栈)。

2.段内调用。即通过指令call调用一个段内地址,既call 00401018

3.无条件转移。call指令操作数0x00401018处的值是:FF25 28204000,该字节码反汇编,得到一个无条件跳转指令,跳转到了位置0x00402008处。

(从位置00402008处获取的值是导入函数MessageBoxA在内存中的VA。)


4.2.2  导入函数地址

    导入函数是从动态链接库引入的函数,所以,导入函数地址位于被加载的进程地址空间的相应的动态链接库模块内。系统在执行用

Windows PE(Portable Executable)是Windows操作系统中可执行文件和动态链接库(DLL)的标准格式。它是一种可移植的可执行文件格式,用于在Windows操作系统上运行应用程序。 Windows PE文件包含了程序的代码、数据和资源,以及用于加载和执行程序的信息。它由多个部分组成,包括DOS头、COFF头、节和数据目录等。 1. DOS头:DOS头是PE文件的开头部分,包含了一些DOS相关的信息。这部分主要是为了兼容早期的DOS系统。 2. COFF头:COFF头是PE文件的第一个标准头部,它包含了一些基本的文件信息,如文件类型、目标机器类型、节偏移等。 3. 节:节PE文件中最重要的部分之一,它描述了文件中各个节(section)的信息。每个节都包含了一段连续的数据,如代码、数据、资源等。节中的每个条目描述了一个节的起始位置、大小、属性等。 4. 数据目录:数据目录是PE文件中的一个重要部分,它包含了一些特殊功能的数据结构的位置和大小信息。例如,导入、导出、重定位等。 除了上述基本结构外,PE文件还包含了其他一些重要的信息,如导入(描述了程序所依赖的外部函数)、导出(描述了程序提供给其他模块使用的函数)、重定位(用于修正程序在内存中的地址)等。 Windows PE文件的格式是由Microsoft定义的,并且在不同的Windows版本中有所变化。了解PE文件的结构和格式对于进行二进制分析、逆向工程和软件开发都非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值