Какие столбцы из дампа объекта C объекта? - PullRequest
1 голос
/ 05 мая 2020

Используя objdump -S --disassemble hello, я получаю примерно такой результат:

000000000000064a <main>:
 64a:   55                      push   %rbp
 64b:   48 89 e5                mov    %rsp,%rbp
 64e:   48 83 ec 10             sub    $0x10,%rsp
 652:   c7 45 f4 00 00 00 00    movl   $0x0,-0xc(%rbp)
 659:   c7 45 f8 01 00 00 00    movl   $0x1,-0x8(%rbp)
 660:   8b 55 f4                mov    -0xc(%rbp),%edx
 663:   8b 45 f8                mov    -0x8(%rbp),%eax
 666:   01 d0                   add    %edx,%eax
 668:   89 45 fc                mov    %eax,-0x4(%rbp)
 66b:   8b 45 fc                mov    -0x4(%rbp),%eax
 66e:   89 c6                   mov    %eax,%esi
 670:   48 8d 3d 9d 00 00 00    lea    0x9d(%rip),%rdi        # 714 <_IO_stdin_used+0x4>
 677:   b8 00 00 00 00          mov    $0x0,%eax
 67c:   e8 9f fe ff ff          callq  520 <printf@plt>
 681:   b8 00 00 00 00          mov    $0x0,%eax
 686:   c9                      leaveq 
 687:   c3                      retq   
 688:   0f 1f 84 00 00 00 00    nopl   0x0(%rax,%rax,1)
 68f:   00 

Что в соответствующих столбцах? Я получаю это в самом конце после того, как # - это комментарий. Что означает 55 для push?

1 Ответ

1 голос
/ 05 мая 2020

Это поля:

  • 000000000000064a <main>: адрес символа и
  • 64a: адрес в шестнадцатеричном формате
  • 55: Код операции байт в шестнадцатеричном виде, т.е. машинный код инструкции.
  • push: мнемоник c код операции
  • %rbp: операнд (ы) инструкция

Байты кода операции могут занимать две строки, например

401230:       c7 05 da 5f 20 00 01    movl   $0x1,0x205fda(%rip)
401237:       00 00 00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...