繁体   English   中英

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

[英]Converting an ELF binary into an .o file

问题如标题所述:是否可以将 ELF 二进制文件hello_world转换为 object 文件hello_world.o ,该文件可用于生成新的二进制hello_world_2 ,它是hello_world的副本?

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

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

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

此命令创建一个 object 文件,其中包含类似的部分

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

That can be accessed if you link this newly generated object file with a separate C file ( https://balau82.wordpress.com/2012/02/19/linking-a-binary-blob-with-gcc/ ). 但是,这与我希望做的有点不同,因为我需要创建一个单独的代码来访问这个新的 object 文件。

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

binary --> binary.o --> binary_new

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

  1. 如何使用 OBJCOPY 的 --add-section 开关?

  2. 如何使用 objcopy 或 libelf 将 elf 文件的一部分替换为另一个,以便将其加载到 Memory 中?

  3. 在汇编代码中定义新的代码段以编译 ELF 二进制文件

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

好像这个有点难

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

我正在尝试将 a.rodata 部分添加到我没有源代码的二进制文件中

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM