Другие ответы, безусловно, путь. Однако я должен был указать дополнительные аргументы командной строки для objcopy, чтобы мой вывод был таким, как ожидалось. Обратите внимание, что я разрабатываю 32-битный код на 64-битной машине, отсюда и аргумент -m32
. Кроме того, мне больше нравится синтаксис сборки Intel, так что вы увидите это и в аргументах.
$ cat test.c
int main() { return 0; }
$ gcc -nostdinc -m32 -masm=intel -Wall -c test.c -o test.o
$ objdump --disassemble --disassembler-options intel test.o
test.o: file format elf32-i386
Disassembly of section .text:
00000000 <main>:
0: 55 push ebp
1: 89 e5 mov ebp,esp
3: b8 00 00 00 00 mov eax,0x0
8: 5d pop ebp
9: c3 ret
Хорошо, вот где я должен был указать, что мне нужен только раздел .text:
$ objcopy --only-section=.text --output-target binary test.o test.bin
$ hexdump -C test.bin
00000000 55 89 e5 b8 00 00 00 00 5d c3 |U.......].|
0000000a
Мне потребовалось около 2 часов, чтобы прочитать и попробовать разные варианты, прежде чем я понял это. Надеюсь, это спасет кого-то еще в этот раз.