LINUX.ORG.RU

Как узнать имя функции по её адресу (из отладочных символов)


0

2

Ситуация такая: Через sigaction ставится обработчик на SIGFPE, SIGILL, SIGSEGV, SIGBUS с флагом SA_SIGINFO. В обработчике происходит добавления записи в лог. В лог попадает информация об ошибке:

  1. Время ошибки
  2. Из siginfo_t - значение si_addr
  3. Из контекста - значение регистра EIP/RIP

Т.е. допустим если произошла ошибка SIGSEGV, то si_addr указывает на адрес памяти к которому было обращение, а EIP/RIP на адрес команды которая выполнила это действие.

И вот главный вопрос: Как по EIP/RIP узнать имя функции, которой принадлежит данный адрес? Если программа компилируется с отладочными символами, то вычислить имя функции вроде как возможно, а вот как это сделать - хз. Может быть есть какая-нибудь функция для этого?


- backtrace_symbols()
- libbfd

anonymous
()

Прочитал про backtrace и backtrace_symbols как раз то, что и нужно. Но какое-то поведение у них странное, имена функций не отображаются. Только адреса и имя файла. Хотя скомпилированная программа с -rdynamic.

slesh
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.