PE文件格式学习(十六):延迟加载表

1.介绍

延迟加载表本质上跟绑定导入表的目的是一样的,都是为了加快程序加载文件的速度,只不过方法不一样。
延迟加载是指在调用某个DLL时才去加载,目的是为了避免在程序启动之初就加载了不必要的DLL而浪费了时间。微软建议在两种情况下使用延迟加载:

  1. 程序并非在启动时就会调用DLL里面的函数
  2. 程序未必会调用该DLL里面的函数 

延迟加载表不是系统支持的一个特性,它是由编译器控制的。

2.分析

我们还是使用之前使用过的程序:Win7下的mspaint.exe。这个程序的延迟加载表的RVA是85ccch,转换成offset是850cch:

1240

它的结构体是:

typedef struct ImgDelayDescr {  
    DWORD        grAttrs;       
    RVA          rvaDLLName;     
    RVA          rvaHmod;       
    RVA          rvaIAT;       
    RVA          rvaINT;      
    RVA          rvaBoundIAT;  
    RVA          rvaUnloadIAT; 
    DWORD        dwTimeStamp;   
    } ImgDelayDescr, * PImgDelayDescr;  

grAttrs:延迟导入结构的属性,0x1为新版本,0x0为老版本,对应上图中的0x00000001

rvaDLLName:dll名字的RVA,对应上图的0x85d40,转为offset是0x85140,下图是对应的dll名

1240

rvaHmod:dll句柄的RVA,对应上图的0x8bd78

rvaIAT:IAT表的RVA,对应上图的0x8a000

rvaINT:INT表的RVA,对应上图的0x85d4c

rvaBoundIAT:绑定导入表的RVA,对应上图的0

rvaUnloadIAT:原始IAT的可选拷贝的RVA,对应上图的0

dwTimeStamp:延迟载入DLL的时间戳,通常为0

转载于:https://www.cnblogs.com/tutucoo/p/9927725.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值