我正在寻找一种最低开销的方法,来将跟踪/日志钩子插入到一些非常性能敏感的驱动程序代码中。这些日志记录必须始终被编译,但大多数时候不执行(但执行速度非常快)。
没有比只有一个全局开/关变量,进行if(enabled){log()}
更简单的方法了。然而,如果可能的话,我甚至想避免每次触发我的钩子时都要加载这个变量的成本。我想到,我可以潜在地使用自修改代码来解决这个问题--也就是说,无论我何时调用我的跟踪函数,当我想禁用钩子时,覆盖跳转指令为NOP,当我想启用它们时,替换跳转指令。
快速搜索并未出现任何先前的类似案例--有人做过吗?它可行吗,是否存在任何我没有预见到的重大障碍?
(Linux,x86_64)