He escrito un sencillo programa Hello World.Dudas en el archivo de objeto ejecutable y reubicable
#include <stdio.h>
int main() {
printf("Hello World");
return 0;
}
Quería saber cómo son el archivo de objeto reubicable y el archivo ejecutable. El archivo objeto que corresponde a la función principal es
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
Aquí, la llamada a la función de printf es callq 13. Una cosa que no entiendo es por qué es 13. Eso significa llamar a la función en adresss 13, a la derecha ?? 13 tiene la siguiente instrucción, ¿verdad? Por favor, explícame qué significa esto?
El código ejecutable correspondiente a principal es
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
Aquí es callq 4003c0. Pero la instrucción binaria es e8 e1 feff ff. No hay nada que corresponda a 4003c0. ¿Qué es lo que me estoy equivocando?
Gracias. Bala
Cualquier comentario de la downvoter? –