Как сделать полноценный SEH
Posted: Sat Apr 11, 2009 12:43 pm
Ну во-первых, интересует отношение как разработчиков ядра, так и приложений - к необходимости такой фишки: Structured Exception Handler
Сегодня прикладной программист имет лишь возможность перехватить исключения по FPU и SSE.
Ну слабовато, вообще-то...
И по другим исключениям можно совершать в приложении более осмысленные действия, чем "Process - forced terminate"
Мои соображения:
1) Без этого механизма как-то не очень и солидно...
2) Работа делится на две части: ядро занимается обработкой исключений и возвращает управление некому хуку, который заказало приложение, в месте с 32-х битной маской для исключений
3) Этот хук, в отличие от уже имеющихся для FPU и SSE, должен как-то получать номер исключения, да и некий TLS (Thread Local Storage) тоже иметь бы неплохо. А может - и крайне необходимо...
4) А вот коды этого хука могли бы содержаться в некой системной библиотеке (или в приложении, если таковая библиотека - это библиотека макросов), и именно эти коды могли бы определять стратегию раскрутки исключения... Однопроходную, двух, и т.п..
Ту часть, что в ядре - могу взять на себя. Пока все это свежо в памяти
Просто как-то надо решить, как это сделать интерфейсно...
Чтобы это не конфликтовало с сегодня имеющимися хуками.
Где располагать этот TLS, чтобы код потока не дергал ядро по всякой ерунде, когда надо узнать в каком контексте он работает. Собственно, это не только в SEH может понадобиться...
В общем, обсудить это надо...
Сегодня прикладной программист имет лишь возможность перехватить исключения по FPU и SSE.
Ну слабовато, вообще-то...
И по другим исключениям можно совершать в приложении более осмысленные действия, чем "Process - forced terminate"
Мои соображения:
1) Без этого механизма как-то не очень и солидно...
2) Работа делится на две части: ядро занимается обработкой исключений и возвращает управление некому хуку, который заказало приложение, в месте с 32-х битной маской для исключений
3) Этот хук, в отличие от уже имеющихся для FPU и SSE, должен как-то получать номер исключения, да и некий TLS (Thread Local Storage) тоже иметь бы неплохо. А может - и крайне необходимо...
4) А вот коды этого хука могли бы содержаться в некой системной библиотеке (или в приложении, если таковая библиотека - это библиотека макросов), и именно эти коды могли бы определять стратегию раскрутки исключения... Однопроходную, двух, и т.п..
Ту часть, что в ядре - могу взять на себя. Пока все это свежо в памяти
Просто как-то надо решить, как это сделать интерфейсно...
Чтобы это не конфликтовало с сегодня имеющимися хуками.
Где располагать этот TLS, чтобы код потока не дергал ядро по всякой ерунде, когда надо узнать в каком контексте он работает. Собственно, это не только в SEH может понадобиться...
В общем, обсудить это надо...