将 ELF 二进制文件转换为 .o 文件

Converting an ELF binary into an .o file

问题如题:Is it possible to convert an ELF binary file hello_world into object file hello_world.o, 可以用来生成新的二进制文件hello_world_2hello_world?

的副本

所以从我的搜索来看,这似乎有点困难。我找到了一种最接近的方法:

使用 objcopyld 从二进制文件创建目标文件。一个示例命令是:

ld -r -b binary ./hello_world -o hello_world.o

此命令创建一个目标文件,其中包含类似

的部分
00000000 l    d  .data    00000000 .data
00000000 g       .data    00000000 _binary_hello_world_start
00000010 g       .data    00000000 _binary_hello_world_end
00000010 g       *ABS*    00000000 _binary_hello_world_size

如果您 link 使用单独的 C 文件 (https://balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/) 这个新生成的目标文件,则可以访问。然而,这与我希望做的有点不同,因为我需要创建一个单独的代码来访问这个新的目标文件。

这个:Make Executable Binary File From Elf Using GNU objcopy Whosebug 讨论对类似主题提供了很好的解释。但是,我仍然想知道是否有某种方法可以实现我最初的问题:

binary --> binary.o --> binary_new

旁注:如果有人好奇我为什么要这样做,那是因为我正在尝试 添加一个 .rodata 部分 到我没有源代码的二进制文件中因为(这是下面广泛讨论的另一个问题)。建议对目标文件执行此过程,因为新添加到二进制文件中的部分将在加载时可读。

  1. How can the --add-section switch of OBJCOPY be used?

  2. How to replace a section of an elf file with another using objcopy or libelf, such that it does get loaded into the Memory?

  3. Define new code section in assembly code to compile ELF binary

感谢您提前提出任何建议,

it seems that this is a bit difficult

这有点轻描淡写:对于所有 实用 目的,这是 不可能 做的(至少在 ELF 平台上),因为在链接的过程 hello_world 链接器 丢弃 包含在目标文件中的大部分信息,这些信息包含在 hello_world 中,并且有必要重新构建它。

I am trying to add a .rodata section into the binary that I have no source code for

这不太可能是您的 真正的 目标 -- 原始二进制文件不会使用您添加的 .rodata,因此您的目标 必须是 某事 其他 。另见 http://xyproblem.info/