mep*_*ell 24 linux shell elf binutils
我尝试了以下内容,但生成的文件仍然是ELF,而不仅仅是部分内容.
$ objcopy --only-section=<name> <infile> <outfile>
Run Code Online (Sandbox Code Playgroud)
我只想要该部分的内容.有没有可以做到这一点的实用工具?有任何想法吗?
ndi*_*dim 47
使用-O binary输出格式:
objcopy -O binary --only-section=.text foobar.elf foobar.text
Run Code Online (Sandbox Code Playgroud)
刚刚用avr-objcopyAVR ELF图像.text部分进行了验证.
请注意,如果Tim在下面指出,如果您的部分没有ALLOC标志,则可能需要添加--set-section-flags .text=alloc以便能够提取它.
Dum*_*001 19
相当不优雅的黑客攻击objdump和dd:
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
Run Code Online (Sandbox Code Playgroud)
所述objdump -h产生包含部分中的小精灵文件偏移预测的输出.我为shell awk生成了一个dd命令,因为dd它不支持十六进制数字.并将命令提供给shell.
在过去,我手动完成了所有操作,没有制作任何脚本,因为它很少需要.
Cir*_*四事件 16
objcopy --dump-section
在Binutils 2.25中引入,并实现了类似的效果-O binary --only-section.
用法:
objcopy --dump-section .text=output.bin input.o
Run Code Online (Sandbox Code Playgroud)
https://sourceware.org/binutils/docs-2.25/binutils/objcopy.html将其记录为:
--dump-section sectionname = filename
将名为sectionname的部分的内容放入文件filename中,覆盖之前可能存在的任何内容.此选项与--add-section相反.此选项类似于--only-section选项,除了它不创建格式化文件,它只是将内容转储为原始二进制数据,而不应用任何重定位.该选项可以多次指定.
最小的可运行示例
电源
.data
.byte 0x12, 0x34, 0x56, 0x78
.text
.byte 0x9A, 0xBC, 0xDE, 0xF0
Run Code Online (Sandbox Code Playgroud)
组装:
as -o main.o main.S
Run Code Online (Sandbox Code Playgroud)
提取数据:
objcopy --dump-section .data=data.bin main.o
hd data.bin
Run Code Online (Sandbox Code Playgroud)
输出:
00000000 12 34 56 78 |.4Vx|
00000004
Run Code Online (Sandbox Code Playgroud)
提取文字:
objcopy --dump-section .text=text.bin main.o
hd text.bin
Run Code Online (Sandbox Code Playgroud)
输出:
00000000 9a bc de f0 |....|
00000004
Run Code Online (Sandbox Code Playgroud)
测试在Ubuntu 18.04 amd64,Binutils 2.30.