objdump 和 objcopy 作为 c/c++ 库

objdump and objcopy as a c/c++ library

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

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

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

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

所有这些 obj* 工具都基于 BFD library。如果您查看 objdump 的工作方式并复制它,您应该能够在您自己的代码中执行相同的操作。

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