0x00 作用
延迟导入表从它的名字上,我们可以知道他是一种加载比较延迟的导入表,不是在一开始就被加载的,而是等到要被使用的时候,才会被延迟加载(动态加载相关链接库并修正函数的虚拟地址,实现对函数的调用)。
目的:
1.提高程序的加载速度。
2.提高兼容性:有的函数在老的Windows版本中并不存在,但是在新的Windows版本中存在,而我们想要写一个Dll来实现一个动态的判断,即可以根据操作系统的版本来决定动态库是否要被加载,则可以使用延时导入技术。
延时导入的局限性:
1.一个导出了全局变量的的Dll是无法被延时加载的。
2.Kernel32.dll是不能被延时加载的,因为要加载好该模块才能调用LoadLibrary和GetProcAddress。
3.不应该在DllMain的入口函数中调用一个延时载入的函数,因为这样可能引起程序奔溃(可能此时的Dll并没有被加载上)。
0x01 结构
数据目录的第十四个成员。
typedef struct ImgDelayDescr {
DWORD grAttrs; // attributes
RVA