【问题标题】:Is there a way to see the functions inside a C/C++ archive (.a)?有没有办法查看 C/C++ 存档 (.a) 中的函数?
【发布时间】:2015-05-05 15:01:23
【问题描述】:

我们有一种情况(简化):

  1. test() 存在于 source.c
  2. source.c 编译为 object.o
  3. object.o 链接到存档 archive.a
  4. archive.a 被编译成最终的 binary

我们正在尝试将 test() 的名称更改为其他名称。但是(4)中的链接步骤表明新方法签名不存在。使用gobjdump,我们可以肯定地看到object.o 中存在新的重命名方法(它与其他方法在同一个SECT 中,并且不是UND)。

我们可以确定object.o 存在于archive.a 中。但是,我们不确定(因为复杂的构建系统)archive.a 包含该方法。

TL;DR:有没有办法查看存档文件内部并列出其中特定二进制对象的功能?

【问题讨论】:

  • 这是 C 还是 C++?在这方面,C 没有“方法”或“对象”。
  • 这实际上是一个 C 方法的开源库,它被放入存档但编译成 C++ 项目。
  • 您可以使用nm 工具列出在库中找到的所有函数。
  • 如果您将archive.a 链接到您的二进制文件中,并且链接器抱怨未知函数,那么该函数不在archive.a 中。至少,不在您包含在链接中的archive.a 的副本中。
  • @JohnBollinger 这正是我们所想的,我们试图看看是否有办法使用“ar”工具来解决这个问题。我现在就试试“nm”工具。

标签: c++ c binary unix-ar


【解决方案1】:

使用nm。假设是 Linux,here's the man page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2010-10-18
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多