PE文件详解五:PE详解之输入表(导入表)详解1
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PE⽂件详解五:PE详解之输⼊表(导⼊表)详解1
⾸先,我们知道PE ⽂件中的数据被载⼊内存后根据不同页⾯属性被划分成很多区块(节),并有区块表(节表)的数据来描述这些区块。
这⾥我们需要注意的问题是:⼀个区块中的数据仅仅只是由于属性相同⽽放在⼀起,并不⼀定是同⼀种⽤途的内容。
例如输⼊表、输出表等就有可能和只读常量⼀起被放在同⼀个区块中,因为他们的属性都是可读不可写的。
其次,由于不同⽤途的数据有可能被放⼊同⼀个区块中,因此仅仅依靠区块表是⽆法确定和定位的。
那要怎么办?对了,PE ⽂件头中IMAGE_OPTIONAL_DEADER32 结构的数据⽬录表来指出他们的位置,我们可以由数据⽬录表来定位的数据包括输⼊表、输出表、资源、重定位表和TLS等15 种数据。
输⼊函数
在代码分析或编程中经常遇到“输⼊函数(Import Functions,也称导⼊函数)”的概念。
这⾥我们就来解释下,输⼊函数就是被程序调⽤但其执⾏代码⼜不在程序中的函数,这些函数的代码位于相关的 DLL ⽂件中,在调⽤者程序中只保留相关的函数信息(如函数名、DLL ⽂件名等)就可以。
对于磁盘上的PE ⽂件来说,它⽆法得知这些输⼊函数在内存中的地址,只有当PE ⽂件被装⼊内存后,Windows 加载器才将相关DLL 装⼊,并将调⽤输⼊函数的指令和函数实际所处的地址联系起来。
这就是“动态链接”的概念。
动态链接是通过PE ⽂件中定义的“输⼊表”来完成的,输⼊表中保存的正是函数名和其驻留的DLL 名等。