PE文件格式(二)

三 . RVA To RAW

PE文件从磁盘到内存的映射:
查找RVA所在节区
使用简单的公式计算文件偏移:

RAW - PointerToRawData = RVA - ImageBase
RAW = RVA - ImageBase + PointerToRawData

example:ImageBase为0x10000000,节区为.text,文件中起始地址为0x00000400,内存中的起始地址为0x01001000,RVA = 5000,RAW = 5000 - 1000 + 400 = 4400。

四 . IAT

IAT(地址导入表):IAT保存的内容与Windows操作系统的核心进程,内存,DLL结构等有关。IAT是一种表格,记录程序正在使用那些库中的那些函数。(很重要,但是书上这里还没开始学习)

五 . DLL

1.DLL的基本概念和相关知识

在我们的电脑里都许多的文件,有一部分就是后缀为dll的文件;DLL文件是动态链接库文件;
对于DLL的描述如下:

  • 不要把库包含到程序中,单独组成DLL文件,需要时调用即可。
  • 内存映射技术使加载后的DLL代码、资源在多个进程中实现共享。
  • 更新库时只要替换相关DLL文件即可,简便易行。

加载DLL的方式实际有两种:一种是“显式链接”(Explicit Linking ),程序使用DLL时加载,使用完毕后释放内存;另一种是“隐式链接”( Implicit Linking ),程序开始时即一同加载DLL,程序终止时再释放占用的内存。IAT提供的机制即与隐式链接有关。下面使用OllyDbg打开notepad.exe来查看IAT。
在这里插入图片描述
这里调用CreateFileW()函数,这个函数在kernel.dll中;DLL文件的Imagebase一般在100000000

实际操作中无法保证DLL一定会被加载到PE头内指定的ImageBase处。但是EXE文件(生成进程的主体)却能准确加载到自身的ImageBase中,因为它拥有自己的虚拟空间。

加载DLL的方式:

显式链接:程序使用DLL时进行加载,使用完毕之后释放内存。
隐式链接:程序开始一桶加载DLL,程序终止释放占用的内存。

2. IMAGE_IMPORT_DESCRIPTOR

IMAGE_IMPORT_DESCRIPTOR结构体中记录着PE文件要导入哪些库文件。

Import:导入,向库提供服务(函数)。   
Export:导出,从库向其他PE文件提供服务(函数)。

这是该结构体的代码:

typedef struct _IMAGE_IMPORT_DESCRIPTOR {
   
    union {
   
        DWORD  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值