【发布时间】:2010-12-29 01:05:13
【问题描述】:
我正在寻找将跟踪/日志记录挂钩插入到一些对性能非常敏感的驱动程序代码中开销最小的方法。必须始终编译这些日志记录内容,但大多数时候什么都不做(但什么也不做非常快)。
没有什么比拥有一个全局开/关词更简单的了,比如if(enabled){log()}。但是,如果可能的话,我什至想避免每次我碰到一个钩子时加载那个词的成本。我突然想到,我可能会为此使用自修改代码——即,在我调用跟踪函数的任何地方,当我想禁用钩子时,我用 NOP 覆盖跳转,并在我想要的时候替换跳转启用它们。
一个快速的谷歌并没有找到任何关于这方面的现有技术——有人做过吗?是否可行,是否有任何我没有预见到的主要绊脚石?
(Linux,x86_64)
【问题讨论】:
-
注意写/执行模式排他性的可能性。它会使编写自修改代码变得更加困难......
标签: c linux self-modifying