Frage

Ich habe einen Gerätetreiber ich flicken will. Dieser Gerätetreiber ruft IOLog und ich möchte loszuwerden, die Protokollierung erhalten.

Wenn ich die Calll zu IOLog mit (der entsprechenden Anzahl von) NOPs innerhalb der Gerätetreiber (kext) ersetzen, die Kernel-Abstürze mit dem, was aussieht wie ein zertrümmerte Stapel ( „Backtrace beendeten Invalide Rahmenzeiger 0“).

Die gleiche Technik jedoch funktioniert gut in User-Space (z NOPping NSLogs innerhalb eines OS X binär).

Was bin ich hier fehlt?

War es hilfreich?

Lösung

Du hast nicht erklären, ob Sie kalt Patching tun (Treiber auf der Festplatte) oder Hot-Patching (Treiber im Speicher). Für In-Memory-Patching, könnten alle Arten von Fragen gibt, wie der Fahrer ausgeführt wird, wenn Sie es patchen, die CPU (s) mit zwischengespeicherten Teile des Codes, etc. Siehe die Intel Abschnitt zu selbstmodifizierenden Code.

Für On-Disk-Patching, könnte es sein, dass Sie eine Verlagerung Datensatz für die Zieladresse haben. Also, wenn der Treiber geladen wird, werden die dynamischen Modul-Lader fixup die Adresse IOLog im Code, es mit der realen Adresse zu ersetzen. Dies wird Ihre NOP-Befehle überschreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top