gpt4 book ai didi

python - 如何以编程方式在 C++ 或 Python 中列出 DLL 的依赖项?

转载 作者:太空狗 更新时间:2023-10-29 21:39:03 28 4
gpt4 key购买 nike

我目前正在使用 Boost Python 为 C++ 项目编写 Python 接口(interface)。问题是,如果缺少 DLL,Python 会给我们一个非常无用的错误消息:

ImportError: DLL load failed: The specified module could not be found.

根据 this site无法显示比这更多的信息。

现在,大问题。我不能使用 dependency 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 中获取依赖表。

因此,值(value) 64,000 美元的问题是:如何从 HMODULE 获取 .exe/.dll 依赖项?一个更好的问题是:那是我获得依赖项的地方吗?如果没有,我在哪里可以找到它?

最佳解决方案是使用 C++,但我们也很高兴拥有 Python 解决方案。任何帮助或建议将不胜感激。谢谢。

* 我会链接这篇文章,但我的代表不够高,无法在一个问题中发布两个链接。 :)

最佳答案

您需要阅读模块的可移植可执行文件头(PE 文件头)。这是一个描述导入、导出、重新定位、部分、资源、代码、静态数据以及二进制文件所依赖的所有其他内容的结构。虽然可以直接解析,但 PE header 结构有很多不明显的怪癖和细微差别。我建议使用 PeLib 等库来为您处理一切。

关于python - 如何以编程方式在 C++ 或 Python 中列出 DLL 的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com