Как перечислить код C, соответствующий разборке

Сказать, что у меня есть исполняемый двоичный файл, полученный в результате компиляции некоторого кода C, и его имя a.out.

Как известно, разобрать его можно командой objdump -d a.out. Вот пример:

00000000004006b6 <main>:
  4006b6:       55                      push   %rbp
  4006b7:       48 89 e5                mov    %rsp,%rbp
  4006ba:       89 7d ec                mov    %edi,-0x14(%rbp)
  4006bd:       48 89 75 e0             mov    %rsi,-0x20(%rbp)
  4006c1:       c7 45 f4 01 00 00 00    movl   $0x1,-0xc(%rbp)
  4006c8:       c7 45 f8 02 00 00 00    movl   $0x2,-0x8(%rbp)
  4006cf:       8b 55 f4                mov    -0xc(%rbp),%edx
  4006d2:       8b 45 f8                mov    -0x8(%rbp),%eax
  4006d5:       01 d0                   add    %edx,%eax
  4006d7:       89 45 fc                mov    %eax,-0x4(%rbp)
  ...
  ...

Теперь я хочу знать, можем ли мы перечислить код C, соответствующий разборке, что означает что-то, как показано ниже:

4006c1:       c7 45 f4 01 00 00 00    movl   $0x1,-0xc(%rbp)  // int i = 1;
4006c8:       c7 45 f8 02 00 00 00    movl   $0x2,-0x8(%rbp)  // int j = 2;

Одним словом, я знаю, что movl $0x2,-0x8(%rbp) - это присвоить переменной целое число 2, но, как вы видите, это не очень ясно, я думаю, есть ли какой-нибудь способ автоматически и немедленно перевести movl $0x2,-0x8(%rbp) в int j = 2, это было бы очень полезный.


person Yves    schedule 20.01.2020    source источник
comment
objdump -dS чередует разборку со строками исходного кода. В неоптимизированном коде это довольно просто.   -  person Peter Cordes    schedule 20.01.2020
comment
@PeterCordes да .... это то, что мне нужно. ржу не могу   -  person Yves    schedule 20.01.2020
comment
Обратите внимание, что если вы оптимизируете, то между скомпилированным языком и сборкой нет связи между фрагментами, независимо от того, что предлагает компилятор. В общем, не ожидается, что будет одна строка C для asm blob, поэтому это может больше сбивать с толку, чем полезно.   -  person old_timer    schedule 20.01.2020