Дизассемблер, который отслеживает, какое значение где - PullRequest
2 голосов
/ 02 июня 2010

Итак, в последнее время я смотрел на разборку моего кода на C ++, и мне пришлось вручную отслеживать, что находится в каждом регистре, например:

  95:   48 8b 16                mov    (%rsi),%rdx ; %rdx = raggedCross.sink
  98:   48 8b 42 38             mov    0x38(%rdx),%rax ; %rax = sink.table
  9c:   8b 4a 10                mov    0x10(%rdx),%ecx ; %ecx = sink.baseCol
  9f:   48 8b 70 50             mov    0x50(%rax),%rsi ; %rsi = table.starts
  a3:   89 c8                   mov    %ecx,%eax   ; %eax = baseCol
  a5:   83 c1 1c                add    $0x1c,%ecx  ; %ecx = baseCol + 1

И так далее. Мои комментарии, добавленные вручную, от поиска смещения различных полей (например, адрес, таблица, baseCol, запуски) в классах C ++.

Это просто сделать, но утомительно и отнимает много времени: идеальная вещь для программы. GDB, кажется, знает смещение различных полей в структуре: я могу сделать & ((Table *) 0x1200) -> запуски, и это говорит правильный адрес. Итак, эта информация вокруг.

Есть ли какой-нибудь дизассемблер, который может использовать эту информацию для аннотирования кода для меня?

Если это не удастся, я смогу написать свой собственный. Где GDB получает смещения?

Ответы [ 3 ]

0 голосов
/ 02 июня 2010

Вы можете использовать отладочную информацию (DWARF2) для просмотра объектных файлов. Поскольку вы используете GCC, вы можете создавать аннотированный дамп с помощью утилиты binutils objdump -S. Если вы сбросите все разделы, информация DWARF также будет сброшена.

0 голосов
/ 02 июня 2010

Вы можете взглянуть на IDA Pro . Он не будет полностью автоматизировать процесс, но, по крайней мере, позволит вам определить вашу структуру / класс в одном месте, и он будет обрабатывать большинство вещей оттуда.

0 голосов
/ 02 июня 2010

GDB использует информацию отладки, которую вы включили для определения такого рода вещей, это не часть обычного исполняемого файла; DWARF - это один общий формат, используемый для хранения отладочной информации

...