Я ищу способ вставки хуков трассировки / логирования в какой-то очень чувствительный к производительности код драйвера.Этот материал регистрации всегда должен быть скомпилирован, но в большинстве случаев он ничего не делает (но очень быстро ничего не делает).
Нет ничего проще, чем просто иметь глобальное слово включения / выключения, делатьif(enabled){log()}
.Однако, если возможно, я бы хотел избежать затрат на загрузку этого слова каждый раз, когда я нажимаю на один из моих крючков.Мне приходит в голову, что я мог бы потенциально использовать для этого самоизменяющийся код - то есть везде, где у меня есть вызов к моей функции трассировки, я перезаписываю переход с помощью NOP, когда хочу отключить хуки, и заменяю переход, когда хочучтобы включить их.
Быстрый гугл не обнаруживает никакого предшествующего уровня техники в этом - кто-нибудь делал это?Реально ли это, есть ли какие-нибудь основные камни преткновения, которые я не предвижу?
(Linux, x86_64)