延迟加载Dll

    这阵子看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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值