The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Найти адрес инструкции, по которой произошла обр. сигнала"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Найти адрес инструкции, по которой произошла обр. сигнала"
Сообщение от Lasvik emailИскать по авторуВ закладки on 24-Июл-03, 12:44  (MSK)
Есть такая проблема: как при обработке сигнала типа SIGSEGV получить адрес инструкции кода, по которой произошло прерывание? С адресом данных, к которым было произведенно запретное обращение, все вроде ясно --- для этого есть специальные структуры, чьи поля заполняются при обработке сигнала. Адрес же собственно инструкции кода, вызвавшей прерывание, находился мною эмпирическим путем, исходя из исследования стека программы при помощи dbg. В результате было получено некое число, которое потом использовалось для вычисления нужного адреса. Способ, впрочем, тот еще --- сильно подозреваю, что он очень архитектурно зависим. Может кто-нибудь знает, какие есть средства работы с такими вещами, ведь умеет же dbg это как-то делать?! Заранее спасибо.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Найти адрес инструкции, по которой произошла обр. сигнала"
Сообщение от Max V. Zinal emailИскать по авторуВ закладки on 24-Июл-03, 20:42  (MSK)
Поскольку народ пока безмолвствует, высскажу по сему поводу
своё нетвёрдое и неконкретное мнение, т.е. IMHO вульгарис.
Вдобавок моё IMHO сильно привязано к моему сугубо практическому
опыту извращённой отладки под Solaris x86. Так что "не любо - не слушай,
а врать не мешай".

Итак, IMHO вульгарис, исходя из весьма далёких лекций по архитектурным
основам CPU, могу сказать следующее. Способность отладчиков обнаружить
"сбойшувную" инструкцию объясняется их умением (а) разбирать архитектурно-
и даже ОС- зависимый стек, включая адреса возврата, и (б) способностью
достать из контекста каждого из потоков сбойнувшего же процесса
значение специального адресного регистра (то бишь как раз адрес инструкции).
В однопоточной программе обработчику SIGSEGV доступно лишь исследование
стека. При использовании sigwait() в выделенном потоке программы многопоточной
можно добиться некоей адекватности в значениях, извлекаемых из контекстов
всех прочих потоков. Надеяться здесь на переносимость кода - верх наивности.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Найти адрес инструкции, по которой произошла обр. сигнала"
Сообщение от Bob emailИскать по авторуВ закладки on 24-Июл-03, 23:47  (MSK)
Был здесь на форуме уже такой вопрос, если не ощибаюсь, пару месяцев назад. Не поленись, поройся, должен найти.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Найти адрес инструкции, по которой произошла обр. сигнала"
Сообщение от Bob emailИскать по авторуВ закладки on 24-Июл-03, 23:56  (MSK)
О, нашел! Вот ссылка:
http://www.opennet.dev/openforum/vsluhforumID9/1724.html
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру