Доступ к ebp при получении eip - PullRequest
1 голос
/ 15 ноября 2010

Я пытаюсь разработать трассировщик стека во время выполнения. У меня есть функция, которая возвращает адрес EIP всякий раз, когда программа отслеживает segfaults. Как я могу вернуться к исходной точке текущей функции (той, в которой произошла авария наблюдаемой программы), чтобы я мог начать поиск?

Ответы [ 2 ]

5 голосов
/ 15 ноября 2010

Нет способа преобразовать указатель инструкции в указатель кадра стека. Одна и та же функция может вызываться много раз (даже рекурсивно) с разными адресами стека; в этом весь смысл наличия стека вызовов. Если у вас есть файл аварийного дампа (основной файл и т. Д.), Он должен содержать дамп всех регистров. Если вам нужны значения регистра, вы должны прочитать их отсюда.

3 голосов
/ 15 ноября 2010

Текущий ebp и esp (и все другие регистры) во время segfault доступны в ucontext, который передается в качестве третьего аргумента обработчику сигнала. Сведения о том, что находится в ucontext, зависят от ОС и ЦП.

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