Найти адрес инструкции, по которой произошла обр. сигнала, Lasvik, 24-Июл-03, 12:44 [смотреть все]Есть такая проблема: как при обработке сигнала типа SIGSEGV получить адрес инструкции кода, по которой произошло прерывание? С адресом данных, к которым было произведенно запретное обращение, все вроде ясно --- для этого есть специальные структуры, чьи поля заполняются при обработке сигнала. Адрес же собственно инструкции кода, вызвавшей прерывание, находился мною эмпирическим путем, исходя из исследования стека программы при помощи dbg. В результате было получено некое число, которое потом использовалось для вычисления нужного адреса. Способ, впрочем, тот еще --- сильно подозреваю, что он очень архитектурно зависим. Может кто-нибудь знает, какие есть средства работы с такими вещами, ведь умеет же dbg это как-то делать?! Заранее спасибо.
|
- Найти адрес инструкции, по которой произошла обр. сигнала, Max V. Zinal, 20:42 , 24-Июл-03 (1)
Поскольку народ пока безмолвствует, высскажу по сему поводу своё нетвёрдое и неконкретное мнение, т.е. IMHO вульгарис. Вдобавок моё IMHO сильно привязано к моему сугубо практическому опыту извращённой отладки под Solaris x86. Так что "не любо - не слушай, а врать не мешай".Итак, IMHO вульгарис, исходя из весьма далёких лекций по архитектурным основам CPU, могу сказать следующее. Способность отладчиков обнаружить "сбойшувную" инструкцию объясняется их умением (а) разбирать архитектурно- и даже ОС- зависимый стек, включая адреса возврата, и (б) способностью достать из контекста каждого из потоков сбойнувшего же процесса значение специального адресного регистра (то бишь как раз адрес инструкции). В однопоточной программе обработчику SIGSEGV доступно лишь исследование стека. При использовании sigwait() в выделенном потоке программы многопоточной можно добиться некоей адекватности в значениях, извлекаемых из контекстов всех прочих потоков. Надеяться здесь на переносимость кода - верх наивности. - Найти адрес инструкции, по которой произошла обр. сигнала, Bob, 23:47 , 24-Июл-03 (2)
Был здесь на форуме уже такой вопрос, если не ощибаюсь, пару месяцев назад. Не поленись, поройся, должен найти.
- Найти адрес инструкции, по которой произошла обр. сигнала, Bob, 23:56 , 24-Июл-03 (3)
|