《逆向工程核心原理》学习笔记5 PE文件学习——PE头核心IAT,EAT

本文是《逆向工程核心原理》学习笔记的第五部分,主要讲解PE文件中的IAT(导入地址表)和EAT(导出地址表)原理。IAT用于记录程序使用库函数的信息,其地址在程序执行后由PE装载器填充。EAT则帮助确定函数的准确起始地址,通过AddressOfNames和ordinal数组查找函数地址。
摘要由CSDN通过智能技术生成

《逆向工程核心原理》学习笔记5

PE头核心——IAT,EAT

一 IAT——导入地址表
用于记录程序正在使用哪些库的哪些函数的表格
其通过记录各函数的实际地址的位置,并记下
CALL DWORD PTR DS:[实际地址位置]这样一条汇编指令
当执行该PE文件的时候,PE装载器将该函数的地址写到DS:[实际地址位置]处

疑问:为啥不直接将该函数的地址写到CALL指令中呢?

解答:第一,在不同的操作系统,不同的语言(人类语言),不同的服务包(what?)中,dll(动态链接库)的版本有所不同,也就是说,在不同的环境下,库函数在内存中的位置也有所不同,所以只有在执行文件后才知道该函数被加载到哪。所以只能靠PE装载器在执行该文件后找到该函数的位置,再将它放到之前安排的位置上。
第二,dll重定位。dll文件本身也是PE文件,它本身也有ImageBase,即优先加载地址,当两个dll文件的ImageBase发生冲突时,后来的那个dll要进行重定位,PE装载器会重新为它分配一段内存空间,这也导致了函数所在的地址无法在加载前确定。
第三,PE头中表示地址用的是相对虚拟地址(RVA)。
我们知道,RVA+ImageBase=VA
因此,实际地址受ImageBase影响

二 IMAGE_IMPORT_DESCRIPTOR
IMAGE_IMPORT_DESCRIPTOR结构体记录了PE文件需要导入哪些库文件。该结构体位于PE体里,它的地址&

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值