【问题标题】:Get list of required BPLs for a given DLL, EXE or BPL获取给定 DLL、EXE 或 BPL 所需的 BPL 列表
【发布时间】:2012-06-08 21:36:17
【问题描述】:

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

我不确定这是否可能只是简单地扫描二进制文件以查找对 .bpl 文件名的文本引用(这很容易出现误报 )。

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

【问题讨论】:

  • peganza.com/#PAL 在源代码上做这种事情,但我认为它不会读取 .exe 等。你可以检查一下。
  • 在 IDE 没有任何线索的情况下,当 Y.BPL 已经隐式后台加载该 BPL 时,即使 IDE 也无法可靠地完成这项工作,否则我们不会得到“无法加载 X.BPL”那个东西正在加载。我也很想知道这个。
  • "DUMPBIN /imports" 可以完美可靠地做到这一点,所以这当然是可能的。但是,将输出返回到您的程序中并不符合您的优雅标准。
  • 你可以尝试读取PE文件的Import address Table,但它只会显示加载时的依赖关系; AFAIK 在不反汇编或执行应用程序的情况下不可能知道每个运行时依赖关系,如果应用程序正在运行,您可以使用带有 TH32CS_SNAPMODULE 标志的 CreateToolhelp32Snapshot 函数。
  • 我猜你也可以在每个依赖的 DLL/BPL 上递归地执行一个 dumpbin /imports,以获得一个完整的递归列表。

标签: delphi packages bpl runtime-packages


【解决方案1】:

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

【讨论】:

  • 这对于已编译的 BPL 来说效果相对较好...我希望有人知道 DLL 和 EXE 的 类似 解决方案,但显然不是。
  • 我会接受你的回答,因为它至少能让我部分到达那里。
【解决方案2】:

我遇到了this from felix-cobri - 它的边缘有点粗糙,但可以满足我的需要,那就是列出我的 exe(或 DLL)使用的所有 DLL。

http://www.felix-colibri.com/papers/colibri_utilities/exe_dll_pe_explorer/exe_dll_pe_explorer.html

祝你好运

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多