Ich bin auf der Suche nach der am wenigsten überschaubaren Möglichkeit, Trace/Logging-Hooks in einen sehr leistungsfähigen Treibercode einzufügen. Diese Logging-Sachen müssen immer kompiliert werden, tun aber meistens nichts (tun aber nichts sehr schnell).Selbstmodifizierender Code für Trace Hooks?
Es gibt nichts viel einfacher als nur ein globales on/off-Wort, eine if(enabled){log()}
tun. Wenn es mir möglich ist, möchte ich sogar die Kosten vermeiden, jedes Mal, wenn ich auf einen meiner Hooks klicke, dieses Wort zu laden. Es fällt mir ein, dass ich dafür möglicherweise selbst modifizierenden Code verwenden könnte - dh überall wo ich einen Aufruf an meine Trace-Funktion habe, überschreibe ich den Sprung mit einem NOP, wenn ich die Hooks deaktivieren will, und ersetze den Sprung, wenn ich will um sie zu ermöglichen.
Ein schneller Google stellt keinen Stand der Technik dar - hat es jemand getan? Ist es machbar, gibt es irgendwelche großen Stolpersteine, die ich nicht voraussehe?
(Linux, x86_64)
Achten Sie auf die Möglichkeit des Schreib/Ausführungsmodus Exklusivität. Es kann das Schreiben von selbst modifizierendem Code etwas schwieriger machen ... – dmckee