【发布时间】:2015-05-05 15:01:23
【问题描述】:
我们有一种情况(简化):
-
test()存在于source.c -
source.c编译为object.o -
object.o链接到存档archive.a -
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”工具。