PE文件结构详解(五)延迟导入表

本文详细介绍了PE文件中的延迟导入表机制,它允许程序在需要时才加载DLL,提高启动速度。通过VC的设置可以方便地使用延迟导入。延迟导入表由 ImgDelayDescr 结构体组成,每个结构体代表一个导入的DLL。当调用延迟导入函数时,会执行一小段代码,通过__delayLoadHelper加载DLL并填充导入表。流程中,通过计算IAT项的偏移获取函数名,然后使用GetProcAddress获取函数地址。延迟导入仅在首次调用时加载函数,并且每次只导入单个函数,而非整个模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

by evil.eagle 转载请注明出处。

http://blog.youkuaiyun.com/evileagle/article/details/12718845


  PE文件结构详解(四)PE导入表讲了一般的PE导入表,这次我们来看一下另外一种导入表:延迟导入(Delay Import)。看名字就知道,这种导入机制导入其他DLL的时机比较“迟”,为什么要迟呢?因为有些导入函数可能使用的频率比较低,或者在某些特定的场合才会用到,而有些函数可能要在程序运行一段时间后才会用到,这些函数可以等到他实际使用的时候再去加载对应的DLL,而没必要再程序一装载就初始化好。

这个机制听起来很诱人,因为他可以加快启动速度,我们应该如何利用这项机制呢?VC有一个选项,可以让我们很方便的使用到这项特性,如下图所示:



在这一项后面填写需要延迟导入的DLL名称,连接器就会自动帮我们将这些DLL的导入变为延迟导入。

现在我们知道如何使用延迟导入了,那这个看上去很厉害的机制是如何实现的呢?接下来我们来探索一番。在IMAGE_DATA_DIRECTORY中,有一项为IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,这一项便延迟导入表,IMAGE_DATA_DIRECTORY.VirtualAddress就指向延迟导入表的起始地址。既然是表,肯定又是一个数组,每一项都是一个ImgDelayDescr结构体,和导入表一样,每一项都代表一个导入的DLL,来看看定义

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值