你如何只提取ELF部分的内容

我已经尝试了以下,但生成的文件仍然是一个ELF,而不是纯粹的部分内容。

$ objcopy --only-section=<name> <infile> <outfile> 

我只想要部分的内容。 有没有可以做到这一点的工具? 有任何想法吗?

Solutions Collecting From Web of "你如何只提取ELF部分的内容"

相当不雅观的围绕objdumpdd攻击:

 IN_F=/bin/echo OUT_F=./tmp1.bin SECTION=.text objdump -h $IN_F | grep $SECTION | awk '{print "dd if='$IN_F' of='$OUT_F' bs=1 count=$[0x" $3 "] skip=$[0x" $6 "]"}' | bash 

objdump -h生成包含elf文件中的段偏移的可预测的输出。 我让awk为shell生成一个dd命令,因为dd不支持十六进制数字。 并将命令提供给shell。

在过去,我手动完成了所有这些工作,而没有编写任何脚本,因为它很少需要。

使用-O binary输出格式:

 objcopy -O binary --only-section=.text foobar.elf foobar.text 

刚刚通过avr-objcopy和AVR ELF图像的.text部分进行了验证。

请注意,如果Tim在下面指出,您的部分没有ALLOC标志,那么您可能必须添加--set-section-flags .text=alloc才能提取它。

objcopy --dump-section

在Binutils 2.25中引入,并且达到了与-O binary --only-section类似的效果。

用法:

 objcopy --dump-section .text=output.bin input.o 

https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html将其记录为&#xFF1A;

– 转储部分sectionname =文件名

将名为sectionname的节的内容放入文件的文件名中,覆盖之前可能已经存在的内容。 这个选项是–add部分的反转。 该选项与–only-section选项类似,不同之处在于它不创建格式化文件,只是将内容转储为原始二进制数据,而不应用任何重定位。 该选项可以多次指定。

测试Binutils 2.25.1 Ubuntu 15.10,产生相同的输出https://stackoverflow.com/a/3925113/895245