У меня есть приложение A (от какой-то компании X). Это приложение позволяет мне расширять функциональность, позволяя мне писать свои собственные функции.
Я сообщаю приложению A, чтобы оно вызывало мои пользовательские функции в файле конфигурации приложения A (именно так оно узнает, что приложение A должно вызывать пользовательские функции). Приложение A использует указатели функций, которые я должен зарегистрировать в приложении A до вызова моих пользовательских функций.
Если в моих написанных пользователем функциях в производстве есть ошибка или ошибка, приложение A перестанет работать. Например, если у меня есть ошибка сегментации в моих написанных пользователем функциях.
Таким образом, приложение A загрузит мою написанную пользователем функцию из общего файла DLL. Это означает, что мои написанные пользователем функции будут выполняться в адресном пространстве процесса приложения A.
Я хочу обрабатывать определенные сигналы, такие как ошибка сегментации, деление на ноль и переполнение стека, но приложения A имеют свои собственные обработчики сигналов, написанные для этого,
Как я могу написать свои собственные обработчики сигналов для перехвата исключений в моих написанных пользователем функциях, чтобы я мог изящно очищать, не затрагивая большую часть приложения A? Поскольку мои пользовательские функции будут вызываться в процессе приложения А, ОС будет вызывать обработчики сигналов, написанные в приложении А, а не мои пользовательские функции.
Как я могу это изменить? Я хочу, чтобы ОС вызывала обработчики сигналов, написанные в моих функциях, но только для сигналов, вызванных моими функциями, которые по своей природе асинхронны.
Примечание. У меня нет исходного кода приложения А, и я не могу вносить в него какие-либо изменения, поскольку оно контролируется другой компанией.
Я буду использовать C и только C на платформах Linux, Solaris и, возможно, Windows.