Hey,
ich versuche derzeit die Argumente einer Funktion von einem Spiel zu bekommen mithilfe eines MS Detours.
Also wenn ich z.B die MessageBoxW Funktion detouren möchte, mache ich es folgendermaßen:
Was auch soweit funktioniert, doch jetzt möchte ich eine Funktion detouren die keinen Rückgabewert hat (void) und davon die Parameter bekommen. Hier ein Ausschnitt aus OllyDbg von der Funktion:
Die 6 Argumente die hier im Disassembly abgebildet sind versuche ich zu bekommen: Arg1: DWORD
Arg2: DWORD
Arg3: float
Arg4: float
Arg5: float
Arg6: bool (default arg = true)
Und IDA:
Mit einem Mid-Function Detour bekomme ich z.B die Werte die im ECX oder EAX Register stehen ohne Probleme zurück, doch mir wäre es lieber mit einem Funktionspointer, anstatt das ganze Inline-Assembler-Gefrickel
Ich vermute, dass das ein __thiscall ist, also eine Member-Funktion... doch wie würde jetzt hier der Funktionspointer aussehen?
Ja, die Funktion dort scheint in der Tat eine Memberfunktion (thiscall) zu sein.
Ich selber benutze eigentlich immer __fastcall, wenn ich solche Funktionen hooke.
Das erste Argument einer Fastcall-Funktion liegt in ECX, das Zweite in EDX, alle Weiteren, wie bei stdcall auch, auf dem Stack. Zudem räumt der Callee den Stack auf, wie bei stdcall und thiscall (sofern keine variablen Argumentlisten benutzt werden) auch.
In deinem Fall sähe die Hookfunktion also so aus:
(den Funktionspointer / -typ daraus zu lesen ist ja trivial)
Das _edx muss sein, sonst würde man arg0 in EDX suchen und alle anderen Argumente einen Platz zu früh auf dem Stack.
Mit freundlichen Grüßen
Jeoni
Noch anzumerken wäre, dass __thiscall bei typedefs funktioniert, bei Funktionsprototypen aber wie von Jeoni korrekt geschrieben __fastcall verwendet werden muss, deshalb der Dummy-edx-Paramter.
Parameter und Calling Convention finden 08/21/2014 - C/C++ - 14 Replies Hey,
habe in einem Spiel mit ollydbg eine Funktion gefunden, von der ich glaube, dass sie Text auf dem Bildschirm ausgibt:
Address Hex dump Command Comments
013CDB28 F30F1085 6CFFFF MOVSS XMM0,DWORD PTR SS: ; FLOAT 42.00000
013CDB30 8D85 78FFFFFF LEA EAX,
013CDB36 F30F5805 5850CE ADDSS XMM0,DWORD PTR DS: ; FLOAT 20.00000 (y coord?)
013CDB3E D985 70FFFFFF FLD DWORD PTR SS: ; FLOAT 1760.00000 (x coord?)
[PHP problem] Calling an object's function with parameters 09/11/2013 - Web Development - 7 Replies Hey guys,
recently I got a problem with PHP on which I haven't found a solution yet. I'm calling a function out of a object, but there seems to be a problem regarding the parameters.
Object (very simplyfied):
class HP{
function preload_async($folders){
var_dump($folders);
}
D3D Hook Problem 11/02/2011 - General Coding - 13 Replies Hi,
ich habe jetzt versucht nen D3D Hook zu schreiben, nachdem ich das Tutorial von purple diamond gelesen habe: http://www.homeofgamehacking.de/attachment.php?aid =120. Leider hab ich echt keine Ahnung was ich hier falsch mache. Bevor ich vor die DllMain Funktion extern "C" hinzugefügt habe, lies sich die Dll nicht mal injecten. Jetzt funktioniert das, allerdings wird kein Rechteck gezeichnet. Die Adresse hab ich auch wie im Tutorial mit IDA bekommen. Wäre wirklich sehr nett wenn sich das...