Mini-Disassembler (32-Bit x86) für Detours-Substitut
-
In einem meiner (im Entwicklungsstadium befindlichen) Projekte verwende ich derzeit Microsoft Detours für das Umbiegen diverser Funktionen. Das funktioniert soweit ganz gut, allerdings ist Detours für kommerzielle Projekte nicht kostenfrei. Die meisten Features von Detours allerdings brauche ich nicht, lediglich das Code-Hooking. Das bekomme ich im Grunde auch selber hin - es ist ja auch nicht viel mehr als ein paar Aufrufe von VirtualProtect und FlushInstructionCache -, aber die "trampoline"-Funktionalität nachzubauen fällt mir etwas schwerer. Dafür ist es ja im Prinzip nötig, die ersten fünf Bytes der Zielfunktion in die Trampolinfunktion zu transferieren, gefolgt von einem JMP zum Rest der Funktion. Allerdings haben x86-Instruktionen variable Länge; einfach so die ersten fünf Bytes herausgreifen geht natürlich nicht. Was ich also bräuchte, wäre ein einfaches Tool, das mir angibt, wo genau die Instruktionen in den ersten fünf Bytes enden. Weiter wäre es schön, wenn ich damit relative Adreßreferenzierungen (JMP +$20 und dergleichen) erkennen und entprechend umbauen könnte.
Für die paar grundlegenden Instruktionen, die am Funktionsanfang üblicherweise auftauchen, kann ich mir das selbst bauen, aber das ist, wenngleich in der Praxis hinreichend, keine Ideallösung. Andererseits fehlen mir Zeit und Muße, das gleich für den ganzen x86-Befehlssatz zu implementieren, daher meine Frage: kennt jemand da schon etwas fertiges?
-
diStorm64 ist ideal dafür - disassembliert sowohl 32bit als auch 64bit code.
-
Danke, das sieht ganz hervorragend aus. BSD-Lizenz paßt auch - wunderbar