***记一次代码导致loader lock的问题***

记一次代码导致loader lock的问题

项目中原有dll用于注入到目标进程并执行detours或hook等操作,在Dllmain中DLL_PROCESS_ATTACH处理了用于detours的模块拦截函数地址获取工作,使用的是loadlibrary,getprocaddress的方式。
现有一新需求,希望通过在dll中加载自己的另外一个dll(暂命名为mydll),并在mydll中进行一些其他工作,于是仍然按照之前逻辑在dll的DLL_PROCESS_ATTACH中使用了loadlibrary加载mydll。<—就是这里导致了loader lock。原因是,主进程加载dll时已经加锁,在Dllmain未退出之前依然处于加锁状态,而此时再调用loadlibrary来加载mydll,要进入mydll的Dllmain则需要获得锁,而上一个锁未解开,导致了死锁异常。之所以起它模块使用loadlibrary未出现这个问题,是因为起它模块都是进程依赖的,在dll注入之前已经加载过了,对于加载过的模块再次使用loadlibrary只会返回一个句柄但并不会再次调用Dllmain,所以不会产生死锁问题。
以上,记录一次开发中遇到的问题。
参考链接:https://blog.csdn.net/cjf_iceking/article/details/40043569

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值