定位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”: 找不到指定的模块"

dbghelp.dll 定位异常奔溃信息

如何处理 C++ 加载的 C# DLL 中的异常

PE学习之重定位,内存加载dll

关于无法加载DLL"***.dll":找不到指定的模块(异常来自HRESULT:0x8007007E)问题的解决办法

C# winform 引用问题 引用了SHDocVw.dll。 把exe单独拷出来就报异常。 有啥方法解决?