获取给定DLL、EXE或BPL所需的BPL清单

8

我想知道是否有一种优雅的方法来确定给定(编译)的DLL、EXE或BPL所需的BPL。

我不确定除了简单地扫描二进制文件以查找对.bpl文件名的文本引用(这可能会导致错误的正面结果)之外,是否还有其他方法。

理想情况下,我希望返回一个TStringList甚至是逗号分隔的字符串,其中包含所有所需的.bpl文件的名称。


http://www.peganza.com/#PAL 可以对源代码进行此类操作,但我不认为它能读取 .exe 等文件。你可以检查一下。 - RobertFrank
即使是IDE也不能可靠地完成这项工作,否则当Y.BPL已经隐式后台加载该BPL时,我们就不会收到“无法加载X.BPL”的消息,而IDE对于该加载事项毫不知情。我真的很想知道这个问题的答案。 - Warren P
2
"DUMPBIN /imports" 可以完美可靠地完成它,所以肯定是可能的。然而,将输出管道返回到您的程序中并不符合您的优雅标准。 - frogb
1
你可以尝试读取PE文件的“导入地址表”,但它只会显示加载时的依赖项;据我所知,如果不反汇编或执行应用程序,就无法知道每个运行时依赖项。如果应用程序正在运行,您可以使用带有TH32CS_SNAPMODULE标志的“CreateToolhelp32Snapshot”函数。 - RRUZ
你可以递归地对每个依赖的DLL/BPL执行dumpbin /imports,以获得完整的递归列表。 - Warren P
3个回答

2

对于包,您可以使用PACKAGEINFO资源的requires部分 - 参见TJclPePackageInfo。


这对已编译的BPLs相对有效... 我希望有人能知道类似的解决方案用于DLL和EXE,但显然没有。 - LaKraven
我会接受你的答案,因为它至少让我有了一部分进展。 - LaKraven

0

GExperts的PE信息工具可以显示任何.exe、.dll或.bpl中隐式加载的bpl和dll列表。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接