定位Dll加载异常的方法
Posted 乘舟凉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定位Dll加载异常的方法相关的知识,希望对你有一定的参考价值。
总体说明
动态库加载异常的原因有以下几种:
1.dll不在dll搜索路径
2.dll依赖的其他dll不在dll搜索路径
3.dll与exe不是同一架构,如exe是64位,dll是32位
4.dll或依赖的dll其导出函数对不上
dll或依赖的dll其导出函数对不上
下面是两个动态库,win32crypt.pyd依赖了pywintypes37.dll
点击这里获取素材
我们使用x64dbg
打开win32crypt.pyd
出现了上面的错误,说win32crypt.pyd
的导入函数?PyWinObject_FromOLECHAR@@YAPEAU_object@@PEB_WH@Z
,找不到实现
我们将?PyWinObject_FromOLECHAR@@YAPEAU_object@@PEB_WH@Z
进行解码为struct _object * __ptr64 __cdecl PyWinObject_FromOLECHAR(wchar_t const * __ptr64,int)
如何解码请查看c++命名粉碎及快速还原
使用ida
打开win32crypt.pyd
,查看导入函数,搜索PyWinObject_FromOLECHAR
发现有问题的函数来自pywintypes37.dll
使用ida
打开pywintypes37.dll
,查看导出函数,搜索PyWinObject_FromOLECHAR
发现其函数名为PyWinObject_FromOLECHAR(wchar_t const * __ptr64,__int64)
,和win32crypt.pyd
的不同之处在于第二个参数为__int64
,这样就对不上了,而导致导入失败
以上是关于定位Dll加载异常的方法的主要内容,如果未能解决你的问题,请参考以下文章
[解决异常] 未经处理的异常 "无法加载 DLL“lib/xxx.dll”: 找不到指定的模块"