1

我需要objdump在 ELF 上执行以获取特定函数和变量的地址和/或大小,objcopy并将其转换为不同的格式以供以后执行的操作。尤其是第一部分,对结果执行的一些操作objdump有点复杂,因此我创建了一个小型 C++ 应用程序来执行该操作。它可以工作,但是它当前调用 gccobjdumpobjdopy直接在调用中包含其参数system

我不喜欢这种方法有多种原因,其中一个主要原因是我要么需要依赖用户在 PC 上拥有它们,要么将它们与我自己的可执行文件一起分发并将其视为一种动态库,但在可执行文件的形式,我也不喜欢。

我的问题是,是否有某种形式的(gcc?)库可以(最好是静态地)链接以以这种方式执行相同的操作?我真的更愿意使用与 gcc 类似的东西,特别是在与 gcc 生成的文件作为输入并提供相同输出的兼容性方面,因为我已经拥有我自己的可执行文件的那种版本。

4

2 回答 2

3

所有这些 obj* 工具都基于BFD 库。如果你看看 objdump 是如何做的并复制它,你应该能够在你自己的代码中做同样的事情。

您可以做的另一件事是将代码从 objdump 和朋友复制到您自己的程序中。它是开源的,您可以这样做。你所需要的只是让你自己的程序也是 GPL,无论如何它们都必须是 GPL 才能使用 BFD 库。

于 2017-05-21T20:55:35.350 回答
2

程序 objdump 和 objcopy 不是 gcc 的一部分,它们是 binutils 的一部分。说到这:libbfd 和 libopcodes 也是 binutils 的一部分,它们包含您可能可以使用的功能。

于 2017-05-21T20:55:05.920 回答