Hallo Herr Lotter,

Im folgenden Post ein Thema, dass eigentlich etwas zu tief für einen Forum-Post ist, und mehr eine Support Anfrage ist. Falls Sie in den nächsten Tagen hierfür Zeit finden, wäre es sehr freundlich, wenn Sie mal einen Blick drauf werfen könnten.


Wenn Sie keine Zeit dafür finden, wäre es super wenn Sie sich zumindest Frage DREI im nächsten Post anschauen könnten.


Es geht darum, eine Art Analyser / Profiler für Lite-C zu schreiben. Die vorgesehene Technik sieht vor, jede Funktion, die der Benutzer in seinem Code definiert hat, zu hooken. D.h. wenn im Script die Funktion aufgerufen wird, springt der Compiler in echt, in eine von mir definierte Funktion, die im Anschluss die eigentliche Funktion aufruft. Das Konzept wird mittels Microsoft Detours umgesetzt.

Nun gibt es allerdings unerwartete Probleme beim hooken von Engine Funktionen. Im folgenden erstmal die Beschreibung wie es funktionieren sollte.

C++ Funktion hooken

Folgender Code wird gestartet (wobei "hook_test" die Funktion "wuhu" hookt. "org_func_trampoline" wird dabei auf die Speicheradresse der Trampoline Funktion gesetzt.



Der Übersicht halber hier die Funktion "wuhu" bevor sie gehook wurde.


Nach dem Hooking Vorgang sieht die Funktion "wuhu" so aus:


Sie springt also in meine hooking Funktion rein (wie gewünscht). Die Hooking Funktion führt nun irgendeinen Code aus, und springt zum Trampoline (bitte "naked" deklaration beachten. Stack wird NICHT beeinflusst).


Das Trampoline liegt in einer komplett verschiedenen Memory Gegend und führt den Code, der durch die Jump Anweisung ersetzt wurde.


Schlussendlich wird zurück zur Funktion "wuhu" gesprungen, und alles läuft seinen gewohnten Gang.



So ist die Theorie / Praxis mit Code der mit Visual Studio kompliert worden ist.


Im nächsten Post gehts weiter (Bildbeschränkung).

Last edited by TechMuc; 08/15/11 20:48.