Các khác câu trả lời chắc chắn con đường để đi. Tuy nhiên, tôi đã phải xác định thêm các đối số dòng lệnh để objcopy để cho đầu ra của tôi được như mong đợi. Lưu ý rằng tôi đang phát triển mã 32 bit trên máy 64 bit, do đó đối số -m32
. Ngoài ra, tôi thích cú pháp lắp ráp intel tốt hơn, vì vậy bạn sẽ thấy rằng trong các đối số là tốt.
$ 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, đây là nơi mà tôi đã xác định rằng tôi đặc biệt chỉ muốn phần .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
Tôi mất khoảng 2 giờ đọc và cố gắng tùy chọn khác nhau trước khi tôi figured this out. Hy vọng rằng điều này giúp người khác tiết kiệm thời gian đó.
Nguồn
2011-11-21 05:52:07
Hai câu trả lời tốt được gửi cùng một lúc. Tôi không biết cái nào để đánh dấu. –
Bạn có thể xem xét chấp nhận [câu trả lời gần đây hơn] (http://stackoverflow.com/a/23502466/1483676) trực tiếp trả lời câu hỏi của bạn (trình biên dịch tinh khiết/câu trả lời liên kết). – cubuspl42