PE格式详解7 输入表详解
来源:互联网 发布:epson打印照片设置 mac 编辑:程序博客网 时间:2024/05/14 21:26
原文地址:http://blog.fishc.com/1600.html
在此之前,我们已经对这个输入表进行了一些实践和理解,这有助于大家对这个概念更进一步的加深认识。
小甲鱼觉得,越是复杂的问题我们应该越是去动手操作它,认识它,这样才容易熟悉它!
在上一节课我们像小鹿一样的乱撞,终于撞到了输入表里边包含的函数名称,嘿嘿,不过地址,我们还是没能找着……
这节课我们将深入来剖析输入表的结构,通过结合实例分析来帮助大家理解输入表的工作原理。
输入表结构
回顾一下,在 PE文件头的 IMAGE_OPTIONAL_HEADER 结构中的 DataDirectory(数据目录表) 的第二个成员就是指向输入表的。
而输入表是以一个 IMAGE_IMPORT_DESCRIPTOR(简称IID) 的数组开始。
每个被 PE文件链接进来的 DLL文件都分别对应一个 IID数组结构。
在这个 IID数组中,并没有指出有多少个项(就是没有明确指明有多少个链接文件),但它最后是以一个全为NULL(0) 的 IID 作为结束的标志。
IMAGE_IMPORT_DESCRIPTOR 结构定义如下:
IMAGE_IMPORT_DESCRIPTOR STRUCT union Characteristics DWORD ? OriginalFirstThunk DWORD ? ends TimeDateStamp DWORD ? ForwarderChain DWORD ? Name DWORD ? FirstThunk DWORD ?IMAGE_IMPORT_DESCRIPTOR ENDS
成员介绍:
OriginalFirstThunk
它指向first thunk,IMAGE_THUNK_DATA,该 thunk 拥有 Hint 和 Function name 的地址。
TimeDateStamp
该字段可以忽略。如果那里有绑定的话它包含时间/数据戳(time/data stamp)。如果它是0,就没有绑定在被导入的DLL中发生。
在最近,它被设置为0xFFFFFFFF以表示绑定发生。
ForwarderChain
一般情况下我们也可以忽略该字段。在老版的绑定中,它引用API的第一个forwarder chain(传递器链表)。
它可被设置为0xFFFFFFFF以代表没有forwarder。
Name
它表示DLL 名称的相对虚地址(译注:相对一个用null作为结束符的ASCII字符串的一个RVA,该字符串是该导入DLL文件的名称。
如:KERNEL32.DLL)。
FirstThunk
它包含由IMAGE_THUNK_DATA定义的 first thunk数组的虚地址,通过loader用函数虚地址初始化thunk。
在Orignal First Thunk缺席下,它指向first thunk:Hints和The Function names的thunks。
这个OriginalFirstThunk 和 FirstThunk明显是亲家,两家伙首先名字就差不多哈。那他们有什么不可告人的秘密呢?
来,我们看下面一张图(画的很辛苦,大家仔细看哈):
- PE格式详解7 输入表详解
- PE格式详解6 输入表
- PE格式详解 输入表信息 (上)
- PE格式详解 输入表信息(下)
- PE格式详解
- PE 格式详解
- PE格式详解3 区块表
- PE格式详解 8 导出表
- PE 格式详解1 PE Header
- 小甲鱼PE详解之输入表(导入表)详解(PE详解07)
- 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
- 小甲鱼PE详解之输入表(导出表)详解(PE详解09)
- PE详解之输入表(导入表)详解(PE详解07)
- 小甲鱼PE详解之输入表(导入表)详解(PE详解07)
- 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
- 小甲鱼PE详解之输入表(导入表)详解(PE详解07)
- 小甲鱼PE详解之输入表(导入表)详解2(PE详解08)
- 小甲鱼PE详解之输入表(导出表)详解(PE详解09)
- jdk各种版本下载地址oracle网站
- 网络编程socket之connect函数
- 1086 - Jogging Trails (欧拉回路+dp)
- 圆角布局
- linux安装rar
- PE格式详解7 输入表详解
- Symfony2 修改form 中 radio 属性, 改变label 文字
- android 控件对齐位置
- 使用Spread.Net如何创建Free-Hand注释
- make中的自动化变量(整理自Gnu Make中文手册)
- JAVA设计模式七:--observer(观察者模式)
- HttpClient 4.0.x Tips
- 30分钟泛型教程
- 【C#】通过Thrift操作HBase系列(3)