GDB: как он получает информацию об исполняемом файле? - PullRequest
1 голос
/ 18 октября 2010

Мы можем установить точку останова на func, следовательно, gdb знает адрес входа и выхода определенной функции. Но как он получает эту информацию? Использует ли он DWARF или readelf для исполняемого файла, если да, то как? Спасибо

Ответы [ 2 ]

1 голос
/ 19 октября 2010

GDB использует несколько «сигналов»:

  • Считывает таблицу символов.
  • Может применяться эвристика для пропуска пролога мимо функции (обычно вы не хотите останавливаться впролог функции, так как параметры вызова, возможно, еще не установлены, и будут выглядеть «забавно» при печати).
  • Если доступно, он также считывает отладочную информацию (которая может быть DWARF, STABSили что-то еще, в зависимости от платформы и компилятора).

Обычно GDB не будет вызывать «внешний» исполняемый файл readelf - он содержит все смарты для непосредственного чтения информации.

Если вы хотите точно как это сделать, прочитайте источник .

0 голосов
/ 30 октября 2011

Функция описана в DWARF с помощью DIE (запись отладочной информации) с тегом DW_TAG_subroutine. У DIE есть атрибуты DW_AT_low_pc и DW_AT_high_pc, которые определяют границы функции.

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