代码之家  ›  专栏  ›  技术社区  ›  Benj

从C可执行文件扫描DLL依赖项

  •  2
  • Benj  · 技术社区  · 15 年前

    我在一个并行构建工具上工作,它构建各种类型的Windows程序。我们的工具的一部分,使我们的用户生活更容易是自动依赖扫描的exe和dll文件。这意味着,如果用户说他们想运行“bob.exe”,当“bob.exe”被分发到构建网络中的其他节点时,他们不必担心依赖性问题。这是因为我们扫描“bob.exe”找出它需要的DLL,并将它们与之一起发送。

    总的来说,这很好地工作,除非一个exe程序加载一个dll。然后必须将依赖项硬编码到用户make文件中。我们最近开始遇到的一个问题是如何处理C dlls/exes。这些似乎包含不属于PE格式的dll引用。我假定这些引用位于某种C容器中,并且C运行时在C运行时开始运行时,C运行时只是以编程方式加载它们。

    有人能告诉我在二进制级别扫描这些引用的最佳方法是什么吗?我的构建工具是多平台的,我的PE扫描器目前是用Java编写的。因此,我不能依赖任何.NET库。我的PE扫描仪已经可以解析PE文件中的所有部分,并且我用来解析包含C++应用程序的并排汇编信息的部分。我只是需要一些指针,以便在C应用程序的情况下做些什么…

    2 回复  |  直到 15 年前
        1
  •  5
  •   Pavel Minaev    15 年前

    .NET程序集的格式由标准定义 ECMA-335 "Common Language Infrastructure (CLI)" 特别是“分区二:元数据定义和语义”,可以免费下载。您可以使用它编写自己的Java解析器,用于提取引用。

        2
  •  2
  •   Jb Evain    15 年前

    你可以使用 pe-file-reader 图书馆:

    此库读取.NET程序集并 .NET模块文件(可移植可执行文件 文件;托管可执行文件)。.NET 存储模块和程序集文件 根据 ECMA 335 标准。