我寫了一個簡單的Hello World程序。對可執行文件和可重定位目標文件的疑問
#include <stdio.h>
int main() {
printf("Hello World");
return 0;
}
我想了解可重定位目標文件和可執行文件的外觀。 對應主函數的對象文件是
0000000000000000 <main>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: bf 00 00 00 00 mov $0x0,%edi
9: b8 00 00 00 00 mov $0x0,%eax
e: e8 00 00 00 00 callq 13 <main+0x13>
13: b8 00 00 00 00 mov $0x0,%eax
18: c9 leaveq
19: c3 retq
這裏的函數調用的printf是callq 13.有一件事我不明白的是爲什麼是13.這意味着調用函數在adresss 13,右??。 13有下一條指令,對嗎?請解釋一下這是什麼意思?
對應於主可執行代碼是
00000000004004cc <main>:
4004cc: 55 push %rbp
4004cd: 48 89 e5 mov %rsp,%rbp
4004d0: bf dc 05 40 00 mov $0x4005dc,%edi
4004d5: b8 00 00 00 00 mov $0x0,%eax
4004da: e8 e1 fe ff ff callq 4003c0 <[email protected]>
4004df: b8 00 00 00 00 mov $0x0,%eax
4004e4: c9 leaveq
4004e5: c3 retq
這callq 4003c0。但二進制指令是e8 e1 fe ff ff。沒有什麼與4003c0相對應。那我錯了什麼?
謝謝。 Bala
來自downvoter的評論? – 2010-05-06 23:24:00