The other answers are definitely the way to go. However, I had to specify additional command line arguments to objcopy in order for my output to be as expected. Note that I am developing 32-bit code on a 64-bit machine, hence the -m32 argument. Also, I like intel assembly syntax better, so you'll see that in the arguments as well.
$ 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
Ok, here's where I had to specify that I specifically only wanted the .text section:
$ 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
It took me about 2 hours of reading and trying different options before I figured this out. Hopefully this saves someone else that time.
staticfunction with no callers in its translation unit will optimize away. So remove thestaticbefore using the answers.