Ситуация такая: Через sigaction ставится обработчик на SIGFPE, SIGILL, SIGSEGV, SIGBUS с флагом SA_SIGINFO. В обработчике происходит добавления записи в лог. В лог попадает информация об ошибке:
- Время ошибки
- Из siginfo_t - значение si_addr
- Из контекста - значение регистра EIP/RIP
Т.е. допустим если произошла ошибка SIGSEGV, то si_addr указывает на адрес памяти к которому было обращение, а EIP/RIP на адрес команды которая выполнила это действие.
И вот главный вопрос: Как по EIP/RIP узнать имя функции, которой принадлежит данный адрес? Если программа компилируется с отладочными символами, то вычислить имя функции вроде как возможно, а вот как это сделать - хз. Может быть есть какая-нибудь функция для этого?