我正在寻找将跟踪/日志记录挂钩插入到一些对性能非常敏感的驱动程序代码中开销最小的方法。这个日志记录的东西必须总是编译进去,但大多数时候什么都不做(但什么也不做非常快)。
没有什么比拥有一个全局开/关词更简单的了,做一个if(enabled){log()}
. 但是,如果可能的话,我什至想避免每次我碰到一个钩子时加载那个词的成本。我突然想到,我可能会为此使用自修改代码——即,在我调用跟踪函数的任何地方,当我想禁用钩子时,我用 NOP 覆盖跳转,并在我想要时替换跳转启用它们。
一个快速的谷歌没有找到任何关于这方面的现有技术——有人做过吗?是否可行,是否有我没有预见到的主要绊脚石?
(Linux,x86_64)