Есть ли способ сообщить процессу трассировки, когда процесс трассировки выполняет инструкцию ветвления?
Как мы знаем, системный вызов ptrace является одним из самых мощных системных вызовов в unix-подобных системах. Все отладочные программы используют ptrace для мониторинга и управления другим процессом, то есть tracee. Используя ptrace, мы можем отслеживать системный вызов чтения/записи в процессе tracee. Я спрашиваю, можем ли мы использовать ptrace для мониторинга tracee и уведомлять tracer только тогда, когда tracee выполняет инструкцию ветви? Возможно ли это? если нет, то можем ли мы уведомить трассировщик, когда выполняется конкретная инструкция по определенному адресу?
PTRACE_SINGLESTEP не подходит для использования в моем случае, потому что это приводит к снижению производительности.
Спасибо за любую помощь.
Что я уже пробовал:
Я попытался изменить двоичный код, чтобы обменять каждую инструкцию ветви на другую, которая ловит трассировщик. Но я ищу другой путь.
Richard MacCutchan
Нет, потому что программа tracer должна проверять каждую инструкцию по мере ее выполнения, чтобы проверить, является ли она инструкцией ветвления. Теоретически это было бы возможно, но это сильно замедлило бы процесс.