如何以编程方式在C ++或Python中列出DLL的依赖项?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以编程方式在C ++或Python中列出DLL的依赖项?相关的知识,希望对你有一定的参考价值。
我目前正在使用Boost Python为C ++项目编写Python接口。问题是如果缺少DLL,Python会给我们一个非常无用的错误消息:
ImportError:DLL加载失败:找不到指定的模块。
据this site说,不可能显示比这更多的信息。
现在,这个大问题。我不能使用依赖walker或dumpbin,因为我们需要能够以编程方式确定缺少哪个DLL。好消息是我们只需要检查第一级依赖项。因此,如果my.exe依赖于a.dll,b.dll和c.dll,那么这是我们感兴趣的唯一一组DLL。如果a,b和c都是它们应该存在的地方那么我的工作完成了。
我已经找到this MSDN page on enumerating for a running process但是无法找到如何为非运行的.exe或卸载.dll。我最接近的是关于LoadLibraryEx函数*的MSDN文章。但是,我不能为我的生活弄清楚如何从返回的HMODULE获取依赖表。
因此,64,000美元的问题是:如何从HMODULE获取.exe / .dll依赖项?更好的问题是:这是我获得依赖关系的地方吗?如果没有那么我在哪里可以找到它?
最佳解决方案是使用C ++,但我们也非常乐意拥有Python解决方案。任何帮助或建议将不胜感激。谢谢。
*我会链接文章,但我的代表不够高,不能在一个问题中发布两个链接。 :)
您需要读取模块的可移植可执行标头(PE标头)。这是一个描述导入,导出,重新定位,部分,资源,代码,静态数据以及二进制文件依赖的所有其他内容的结构。虽然它可以直接解析,但PE Header结构有很多怪癖和细微差别并不明显。我建议使用像PeLib这样的库来处理所有事情。
以上是关于如何以编程方式在C ++或Python中列出DLL的依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式(Python)抓取流式实时股票图表代码数据及其指标