typedef struct _IMAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics; // 0 for terminating null import descriptor
DWORD OriginalFirstThunk; // 包含指向IMAGE_DATA(输入名称表)RVA 的结构数组
};
DWORD TimeDateStamp; //当可执行文件不与被导入的DLL进行绑定时,此字段为0
DWORD ForwarderChain; //第一个被转向的API索引
DWORD Name; //指向被导入的DLL 名称
DWORD FirstThunk; //指向输入地址表(IAT)RVA,IAT是一个IMAGE_THUNK_DATA结构的数组
} IMAGE_IMPORT_DESCRIPTOR;
typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR; 有多少个导入DLL就有多少个IMAGE_IMPORT_DESCRIPTOR结构体 在PE文件没有导入到内存之前,OriginalFirstThunk和FirstThunk 结构都是一个东西,但是导入内存后,系统会根据OriginalFirstThunk对FirstThunk指向的表重新写入真实函数的地址。就是IAT了。 比如,如果该PE文件从10个不同的DLL中引入函数,那么这个数组就有11个成员。 第11个数组以一个全0的成员结尾。 那么.rdata段的内容应该就是IMAGE_IMPORT_DESCRIPTOR?结构数组了,我们这里用到user32.dll库,第一个元素的成员1的地址是不是就是.rdata的首地址呢?
?
不是这样的,这里有个规律,我们导入了多少个函数,那么就要空出8乘以导入函数个数个字符的空间(为什么要空些空间呢?要放什么呢?一会便可知晓),
在其后才是IMAGE_IMPORT_DESCRIPTOR结构成员的首地址。
在这里我们导入了1个函数,那么应该空1 *  = 8个字符,.rdata段的首地址是600h,
那么IMAGE_IMPORT_DESCRIPTOR结构成员的首地址应该是608h。

最新文章

  1. Input checkbox 添加样式背景
  2. i++是否原子操作
  3. 微信也能鉴别山寨iPhone【微信高级教程2】
  4. 吃豆子(Packman)
  5. 深入了解Javascript模块化编程
  6. github项目filter_firewall说明
  7. Ganglia系列(一)安装
  8. ios paper for facebook 使用第三方库
  9. 【Java】对服务器程序的理解
  10. ubuntu 14.04 chromium 设备adobe flash player(亲测可行)
  11. MysqlRouter 实现mysql5.6读写分离
  12. php的数据访问和封装运用
  13. nodejs前后分离
  14. 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)
  15. Archlinux下vmware-workstation中安装rhel5并通过桥接模式(bridge)上网
  16. jQuery 重复加载,导致依赖于 jQuery的JS全部失效问题
  17. 二叉查找树实现实例(C语言)
  18. Introducing the Filter Types
  19. Objective-c nil, Nil, NULL和NSNull的区别
  20. nodejs docker 开发最好选择yarn 进行包管理而不是npm

热门文章

  1. COJ 0332 The Flash
  2. NEW关键字的三种用法
  3. lr 自带的例子,如何进行关联,通过代码的函数进行实现
  4. C# 实现文件或目录复制到指定目录
  5. C#中枚举类型和int类型的转化
  6. shell编程(一)--常用变量及表达式
  7. Object-C 对象 (创建/销毁 对象)-- 笔记
  8. ceph主要数据结构解析3-Ceph_fs.h文件
  9. IOS后台执行机制 与 动作
  10. MVC4数据访问EF查询linq语句的时候报错找不到表名问题