c++ - objdump 和 objcopy 作为 c/c++ 库

标签 c++ c binutils objdump objcopy

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

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

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

最佳答案

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

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

关于c++ - objdump 和 objcopy 作为 c/c++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101624/

相关文章:

c++ - 如何在 Windows 10 上添加连接器 C++ 并提升到 clion 项目

c++ - c++ - 如何在运行时在c++中停止程序3秒

c++ - 打开 SFML 窗口会出现内存读取错误

c - 在 c 中编写 Alternate_Case 函数?

c - 在 git index 中添加了修改后的文件,但该文件未更改为暂存文件

c - 构建 binutils 时使用了哪些配置选项?

c++ - 如何在 C++ 中将 vector 迭代器转换为 int

c - 将 memcpy 与具有常量成员的目标结构一起使用是否合法?

gcc - 如何正确避免有关 ".ARM.exidx"部分未设置 sh_link 的警告?

c++ - 为什么 GNU binutils 和 GDB 合并为一个包?