Как разобрать эльфийские файлы в GDB? - PullRequest
1 голос
/ 06 сентября 2010

Как разобрать файл после использования команды strip в gdb?

Ответы [ 2 ]

5 голосов
/ 07 сентября 2010

Вы можете использовать команду GDB x/i, например,

(gdb) x/4i 0x400390
   0x400390:    xor    %ebp,%ebp
   0x400392:    mov    %rdx,%r9
   0x400395:    pop    %rsi
   0x400396:    mov    %rsp,%rdx

Но то, что вы вероятно ищете, это objdump -d a.out

0 голосов
/ 15 февраля 2013

Вы также можете использовать команду disassemble. Он работает как x /i, но имеет необязательные флаги r nd m, которые, соответственно, показывают необработанное кодирование инструкций и соответствие номера строки исходного кода.

С disassemble /rm:

(gdb) p free
$1 = {void (void *)} 0x7ffff7df0980 <free>
(gdb) disassemble /rm free,+13
Dump of assembler code from 0x7ffff7df0980 to 0x7ffff7df098d:
121 in dl-minimal.c
   0x00007ffff7df0987 <free+7>: 53                      push   %rbx
   0x00007ffff7df0988 <free+8>: 48 89 fb                mov    %rdi,%rbx

122 in dl-minimal.c
123 in dl-minimal.c
   0x00007ffff7df0980 <free+0>: 48 3b 3d 49 d8 20 00    cmp    0x20d849(%rip),%rdi        # 0x7ffff7ffe1d0 <alloc_last_block>
   0x00007ffff7df098b <free+11>:    74 03               je     0x7ffff7df0990 <free+16>

End of assembler dump

С x /i:

(gdb) p free
$3 = {void (void *)} 0x7ffff7df0980 <free>
(gdb) x /4i free
   0x7ffff7df0980 <free>:   cmp    0x20d849(%rip),%rdi        # 0x7ffff7ffe1d0 <alloc_last_block>
   0x7ffff7df0987 <free+7>: push   %rbx
   0x7ffff7df0988 <free+8>: mov    %rdi,%rbx
   0x7ffff7df098b <free+11>:    je     0x7ffff7df0990 <free+16>

Преимущество (в зависимости от ваших потребностей) x /i перед disassemble заключается в том, что x /i принимает размер в инструкциях, а disassemble принимает размер в байтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...