这阵子看PE文件,看到延迟加载数据目录项。以前没用过这功能,就顺带学习了一下其应用。网上找的方法不是很好用,就google了一把,找了台湾某个大学的教学例程,包括3个压缩文件这里简单介绍一下各个文件的内容:

1).DelayLoadDemo.zip: 创建基本的延迟加载工程;Dll创建过程和普通的没有什么差别,引用该Dll的Exe程序需要在工程属性->连接->输入中做一些设置,这些设置已经保存在DelayLoadDemo的工程配置文件中,本文不在赘述;

​​DelayLoadDemo.zip​​

2).DelayLoadException.zip:如绝大多数网页所述,当进程调用延迟加载Dll时,如果Dll加载失败,或者Dll模块中不存在调用的函数,将引发异常。开发者可以捕获该异常并处理。DelayLoadException.zip即演示了如何处理此类异常。

​​DelayLoadException.zip​​

3).DelayLoadHook.zip:名字里带了Hook,还以为有利用点,后来看代码发现,仅仅是delayhlp.cpp源码中提供的一个全局函数指针变量__pfnDliNotifyHook2:,在Exe所属的源码中显示的导出该变量并赋值,就可以自己加载延迟库。原本想通过注入的方式修改这个全局变量的值,后来一想,别人发布的代码未必能会有符号文件,--->__pfnDliNotifyHook2未必能被找到~因此这种hook方式并没有什么卵用,最多也是折腾折腾自己写的代码。思路大致是用debug API搜索进程空间中的变量名__pfnDliNotifyHook2,获得地址后给他赋值。这个浩大的工程以后有空再说~

​​DelayLoadHook.zip​​