Siga obteniendo e8 00 00 00 00 como código de máquina para llamar a una función en ensamblado
Sé cuando usoobjdump -dr
en mi archivocall
aparece en el código de la máquina comoe8 00 00 00 00
porque aún no se ha vinculado. Pero necesito averiguar cuál es el00 00 00 00
se convertirá después de que el vinculador haya hecho su trabajo. Sé que debería calcular el desplazamiento, pero estoy un poco confundido al respecto.
Como ejemplo con el siguiente código, una vez que se realiza la parte del enlazador, ¿cómo deberíae8 00 00 00 00
¿ser? ¿Y cómo llego a esa respuesta?
Estoy probando con este código de muestra: (Estoy tratando de llamar a MOO)
Disassembly of section .text:
0000000000000000 <foo>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 8b 45 fc mov -0x4(%rbp),%eax
a: 83 e8 0a sub $0xa,%eax
d: 5d pop %rbp
e: c3 retq
000000000000000f <moo>:
f: 55 push %rbp
10: 48 89 e5 mov %rsp,%rbp
13: 89 7d fc mov %edi,-0x4(%rbp)
16: b8 01 00 00 00 mov $0x1,%eax
1b: 5d pop %rbp
1c: c3 retq
000000000000001d <main>:
1d: 55 push %rbp
1e: 48 89 e5 mov %rsp,%rbp
21: 48 83 ec 10 sub $0x10,%rsp
25: c7 45 fc 8e 0c 00 00 movl $0xc8e,-0x4(%rbp)
2c: 8b 45 fc mov -0x4(%rbp),%eax
2f: 89 c7 mov %eax,%edi
31: e8 00 00 00 00 callq 36 <main+0x19>
32: R_X86_64_PC32 moo-0x4
36: 89 45 fc mov %eax,-0x4(%rbp)
39: b8 00 00 00 00 mov $0x0,%eax
3e: c9 leaveq
3f: c3 retq