Отслеживать вызовы sigprocmask с помощью Syscall User Dispatch?Linux

Anonymous
Отслеживать вызовы sigprocmask с помощью Syscall User Dispatch?

Сообщение Anonymous »

Я использую prctl(PR_SET_SYSCALL_USER_DISPATCH, ...), чтобы включить диспетчеризацию пользователей системных вызовов с помощью обработчика SIGSYS, который вызывается, когда приложение выдает какой-либо системный вызов. Вызов prctl() также помечает область кода, включающую обработчик SIGSYS, как исключенную из перенаправления системных вызовов.
Обработчик SIGSYS вызывает системный вызов, который изначально был выполнен приложением, и сохраняет результат системного вызова в полученном им массиве uc_mcontext.gregs. Это не работает для таких системных вызовов, как rt_sigprocmask, потому что когда обработчик SIGSYS возвращается, sa_restorer восстанавливает маску сигнала приложения, существовавшую до системного вызова rt_sigprocmask, отменяя любые изменения, сделанные обработчиком SIGSYS.
Есть ли способ сохранить изменения в маске сигнала после SIGSYS обработчик возвращает управление приложению?
Предназначены ли системные вызовы rt_sigprocmask для другого мониторинга?

Подробнее здесь: https://stackoverflow.com/questions/798 ... r-dispatch

Вернуться в «Linux»