Utilities
使用什麼工具來查看目標文件?
我正在閱讀一本關於連結器和載入器的舊書,它有目標程式碼的圖像。
但我不知道用什麼工具來顯示這些文件的內容。
如果有人能指出該工具,我將不勝感激。
這是目標文件的C程式碼和相應的顯示。
源文件
m.c
:extern void a(char *); int main(int argc, char **argv) { static char string[] = "Hello, world!\n"; a(string); }
源文件
a.c
:#include <unistd.h> #include <string.h> void a(char *s) { write(1, s, strlen(s)); }
對象程式碼
m.o
:Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000010 00000000 00000000 00000020 2**3 1 .data 00000010 00000010 00000010 00000030 2**3 Disassembly of section .text: 00000000 <_main>: 0: 55 pushl %ebp 1: 89 e5 movl %esp,%ebp 3: 68 10 00 00 00 pushl $0x10 4: 32 .data 8: e8 f3 ff ff ff call 0 9: DISP32 _a d: c9 leave e: c3 ret ...
對象程式碼
a.o
:Sections: Idx Name Size VMA LMA File off Algn 0 .text 0000001c 00000000 00000000 00000020 2**2 CONTENTS, ALLOC, LOAD, RELOC, CODE 1 .data 00000000 0000001c 0000001c 0000003c 2**2 CONTENTS, ALLOC, LOAD, DATA Disassembly of section .text: 00000000 <_a>: 0: 55 pushl %ebp 1: 89 e5 movl %esp,%ebp 3: 53 pushl %ebx 4: 8b 5d 08 movl 0x8(%ebp),%ebx 7: 53 pushl %ebx 8: e8 f3 ff ff ff call 0 9: DISP32 _strlen d: 50 pushl %eax e: 53 pushl %ebx f: 6a 01 pushl $0x1 11: e8 ea ff ff ff call 0 12: DISP32 _write 16: 8d 65 fc leal -4(%ebp),%esp 19: 5b popl %ebx 1a: c9 leave 1b: c3 ret
您可以使用
objdump
. 參見man objdump。例如-d
反彙編選項(有很多選項):objdump -d a.o
另一個有用的程序包含在binutils中。
請參閱 objdump 選項。例如:
objdump -d ao
objdump -Dao
objdump -Sao