[英]Converting an ELF binary into an .o file
问题如标题所述:是否可以将 ELF 二进制文件hello_world
转换为 object 文件hello_world.o
,该文件可用于生成新的二进制hello_world_2
,它是hello_world
的副本?
所以从我的搜索来看,这似乎有点困难。 我找到了一种最接近的方法:
使用objcopy
或ld
从二进制文件创建 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 文件执行此过程,因为新添加到二进制文件中的部分将在加载时可读。
感谢您提前提出任何建议,
好像这个有点难
这有点轻描淡写:出于所有实际目的,这是不可能做到的(至少在 ELF 平台上),因为在链接hello_world
的过程中,linker丢弃了包含在 object 文件中的大部分信息,这些信息包含hello_world
,并且是必要的再次重建它。
我正在尝试将 a.rodata 部分添加到我没有源代码的二进制文件中
这不太可能是您的真正目标 - 原始二进制文件不会使用您添加的.rodata
,因此您的目标必须是别的东西。 另见http://xyproblem.info/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.