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

Respuestas a la pregunta(3)

Su respuesta a la pregunta