значения регистров
От: vvv848165@ya.ru  
Дата: 29.01.19 09:31
Оценка:
можно ли как нибудь при исключении узнать какие были значения регистров? Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)

А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?
Re: значения регистров
От: AlexGin Беларусь  
Дата: 29.01.19 11:39
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>можно ли как нибудь при исключении узнать какие были значения регистров?


Если разработчик написал программу на C или C++, то чем данная информация (насчёт значений регистров CPU) может быть ему полезна?

VYR>Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)


Как-то странно говорить о стандартах, если приложение в состоянии UB.
Ну будет какая-нибудь штуковина, которая покажет регистры. Что может иметь хоть какую-то пользу, если писать на ассемблере.
Но ведь если писать на ассемблере, то жизни не хватит, чтобы написать что-либо значительное

VYR>А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?


Предположу, что далеко не всегда, перед крахом программы вызывается исключение.
Re[2]: значения регистров
От: vvv848165@ya.ru  
Дата: 29.01.19 12:00
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Здравствуйте, vvv848165@ya.ru, Вы писали:


VYR>>можно ли как нибудь при исключении узнать какие были значения регистров?


AG>Если разработчик написал программу на C или C++, то чем данная информация (насчёт значений регистров CPU) может быть ему полезна?


VYR>>Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)


AG>Как-то странно говорить о стандартах, если приложение в состоянии UB.

AG>Ну будет какая-нибудь штуковина, которая покажет регистры. Что может иметь хоть какую-то пользу, если писать на ассемблере.
AG>Но ведь если писать на ассемблере, то жизни не хватит, чтобы написать что-либо значительное

VYR>>А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?


AG>Предположу, что далеко не всегда, перед крахом программы вызывается исключение.

разговор неочём ...
Re: значения регистров
От: lpd Черногория  
Дата: 29.01.19 12:14
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>можно ли как нибудь при исключении узнать какие были значения регистров? Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)


Под linux исключения реализованы через сигналы. Можно установить свой обработчик и получить значения регистров через ucontext_t.
man sigaction : ucontext
Разумеется, будет работать только для системных исключений типа seg_fault, а не для своих throw.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 29.01.2019 12:19 lpd . Предыдущая версия . Еще …
Отредактировано 29.01.2019 12:18 lpd . Предыдущая версия .
Re: значения регистров
От: _NN_ www.nemerleweb.com
Дата: 30.01.19 13:45
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>можно ли как нибудь при исключении узнать какие были значения регистров? Может есть стандартные API? Было бы интересно аналогичное и под линух. (google breakpad такое может)


VYR>А перед корахом программы всегда ли вызывается исключение если оно установлено, или возможны особые случаи?


В Windows если исключение брошено через SEH (https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement?view=vs-2017) , то передаётся структура CONTEXT с регистрами процессора во время исключения.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: значения регистров
От: vvv848165@ya.ru  
Дата: 31.01.19 06:27
Оценка:
спасибо!!! круто!
жалко что под линух этой функции нет
Re[2]: значения регистров
От: vvv848165@ya.ru  
Дата: 05.02.19 07:02
Оценка:
а можно по подробней или какой-нибудь пример?
А устанавливать сигнал нужно через signal или через другую функцию?(там вроде параметр int)
Re[3]: значения регистров
От: lpd Черногория  
Дата: 05.02.19 07:44
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>А устанавливать сигнал нужно через signal или через другую функцию?(там вроде параметр int)


Устанавливать обработчик сигнала через sigaction, с флагом SA_SIGINFO. man sigaction.
Для тестирования сигнал можно посылать через утилиту kill.
Пример легко гуглится: ссылка
В этом примере REG_PC — регистр Program Counter (Sparc). Тебе нужен будет REG_RIP, например.(/usr/include/x86_64-linux-gnu/sys/ucontext.h)
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Отредактировано 05.02.2019 7:47 lpd . Предыдущая версия . Еще …
Отредактировано 05.02.2019 7:45 lpd . Предыдущая версия .
Re[2]: значения регистров
От: lis_asm  
Дата: 24.11.19 14:33
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Но ведь если писать на ассемблере, то жизни не хватит, чтобы написать что-либо значительное


Не соглашусь, дело привычки и пользование всякими синтаксисами без меток. Только не нужно это, т.к. больше ни где не заработает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.