Ich habe ein einfaches Hello World-Programm geschrieben.Zweifel in der ausführbaren und verschiebbaren Objektdatei
#include <stdio.h>
int main() {
printf("Hello World");
return 0;
}
Ich wollte verstehen, wie die verschiebbare Objektdatei und die ausführbare Datei aussehen. Die Objektdatei mit der Hauptfunktion entspricht, ist
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
Hier ist der Funktionsaufruf für printf ist callq 13. Eine Sache, ich verstehe nicht, warum es 13 ist Das bedeutet, 13 die Funktion bei adresss nennen, rechts ??. 13 hat die nächste Anweisung, oder? Bitte erkläre mir, was das bedeutet ??
Der ausführbare Code zur Haupt entsprechende
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
Hier callq 4003c0 ist. Aber die binäre Anweisung ist e8 e1 fe ff ff. Es gibt nichts, was 4003c0 entspricht. Was ist das, dass ich falsch liege?
Danke. Bala
Irgendein Kommentar vom Downvoter? –