我需要在ELF上执行objdump
,以获取特定函数和变量的地址和/或大小,以及objcopy
,以将其转换为其他格式,以便以后执行操作。特别是在第一部分中,对objdump
结果执行的一些操作有些复杂,因此我创建了一个小型C++应用程序来执行该操作。它可以工作,但是当前它通过objdump
调用直接调用gcc的objdopy
和system
(包括其参数)。
我不喜欢这种方法有多种原因,主要原因之一是我要么需要依靠用户将其安装在PC上,要么将其分发给我自己的可执行文件,然后将其视为一种动态库。可执行文件的形式,我也不喜欢。
我的问题是,是否可以(最好以静态方式)链接某种形式的(gcc?)库来执行相同的操作?我真的很想像gcc一样使用某些东西,尤其是在与gcc产生的文件作为输入并提供相同输出的兼容性方面,因为我已经拥有自己可执行文件的这种版本。
最佳答案
所有这些obj *工具都基于BFD library。如果查看objdump的工作方式并复制它,则应该能够在自己的代码中执行相同的操作。
您可以做的另一件事就是将objdump和好友中的代码复制到自己的程序中。它是开源的,您可以做到。您只需要使自己的程序也成为GPL,就必须使用BFD库。
关于c++ - objdump和objcopy作为C/C++库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44101624/