Hi Leute,
ich habe ein Problem
durch etwas Patchen von Pointern möchte ich eine Intercept-Funktion in einen Prozess zwischenschalten, um den Parameterfluss an einer Stelle loggen zu können.
Die Funktion, die ich dabei intercepten möchte, ist ein Teil einer Klasse. Der Pointer befindet sich also vielfaches von 4 unter der Position der Klasse.
Gesagt getan ich leite alle Funktionsaufrufe dieser Methode auf meine Intercept Funktion um.
Das Problem, was sich dabei ergibt ist die Aufrufkonvetion der Zielfunktion. Es handelt sich dabei um einen FastCall, eine auf Speed getrimmte Parameterübergabe Varainte von MSVC Proc1(ECX, EDX, stack1, stack2, stack3 .....).
Delphi biete diese Konvention leider nicht an. Ein artverwandtes Pendant ist Borland's "register" Aufruf Proc1(EAX, EDX, ECX, stack1, stack2, stack3, ...)
Nun zu meinem Problem^^
Meine Zielfunktion wird also mit "fastcall" aufgerufen. Meine Intercept Funktion kann kein "fastcall" und versucht mit "register" zu kompensieren. Die Zielfunktion hat drei Parameter
Irgendwie ist da bei mir der Wurm drin.
Wie gelingt es mir an das 3. Parameter der Funktion zugelangen.
Org_Proc(ECX, EDX, stack1)
Intercep(EAX, EDX, ECX, stack1)
Org_Param1 befindet sich in Intercept_Param3
Org_Param2 befindet sich in Intercept_Param2
Org_Param3 befindet sich NICHT :[ in Intercept_Param4
Was ist schief gelaufen?
Hat meine Idee eine Macke?
Habe gehört die Richtung (left to right) der Parameterübergabe ist unterschiedlich in registern und stack und unterscheidet sich in "register" und "fastcall".
Alles sehr verwirrend.
Hat jemand vielleicht eine Idee über inline Assembler oder ein Funktions-Prefab für diesen Fall?
Bin für jeden Kommentar oder jede andere Art von Hilfe dankbar
Mit freundlichen Grüßen
Tobi