私は、トレース/ロギングフックを非常に性能に敏感なドライバコードに挿入するための最小オーバーヘッドの方法を探しています。このロギングは常にコンパイルされなければなりませんが、ほとんどの場合、何もしません(しかし、非常に速いことは何もしません)。トレースフックの自己修正コードですか?
if(enabled){log()}
を実行するだけで、グローバルオン/オフワードを持つよりもずっと簡単なことはありません。しかし、可能であれば、私は自分のフックのいずれかを押すたびにその単語を読み込むコストを避けたいと思っています。それは私が潜在的に自己修正コードを使用する可能性が私に発生する - 私は私のトレース機能への呼び出しを持っているすべての場所で、私はNOPでジャンプを上書きし、フックを無効にしたい時にジャンプを置き換えるそれらを可能にする。
急いでgoogleはこれに関する先行技術を立てていません。それは実現可能ですか?私が予見していない主要な障害物はありますか?
(Linuxでは、x86_64版)
書き込み/実行モードの排他性の可能性に注意してください。それは、より難しくなる自己修正コードを書けるようにすることができます... – dmckee