ich habe derzeit wieder 'nen "kleines" problem, und zwar versuche ich in einem spiel eine __fastcall funktion mit microsoft detours zu hooken. das problem ist jetzt, dass die __fastcall funktion von microsoft gegenüber der von borland unterscheidet - access violation meldung.
es liegt eindeutig an der __fastcall convention.
ich könnte mir meine eigene detour funktion basteln und einen naked hook anwenden, aber den schritt möchte ich ungerne gehen, da ms detours mir schon alles "sauber" erledigt.
hat jemand vielleicht eine lösung, wie ich das jetzt mit der calling convention regel?
zeig mal asm dump von der entsprechenden funktion, wirste aber wahrscheinlich net um nen naked hook o.ä. tricks drumrumkommen.
borland übergibt die ersten 3 parameter über eax, edx, ecx, die restlichen von links nach rechts über den stack - microsoft fastcall übergibt nur 2 über register ecx, edx, und die restlichen von rechts nach links, weshalb das logischerweise net funktioniert.
wenn es wie im bsp. da nur 3 parameter sind kannste microsoft fastcall benutzen und dir den ersten parameter per inline assember aus eax rausholen.
zeig mal asm dump von der entsprechenden funktion, wirste aber wahrscheinlich net um nen naked hook o.ä. tricks drumrumkommen.
borland übergibt die ersten 3 parameter über eax, edx, ecx, die restlichen von links nach rechts über den stack - microsoft fastcall übergibt nur 2 über register ecx, edx, und die restlichen von rechts nach links, weshalb das logischerweise net funktioniert.
wenn es wie im bsp. da nur 3 parameter sind kannste microsoft fastcall benutzen und dir den ersten parameter per inline assember aus eax rausholen.
ich könnte jetzt nen asm dump posten, aber es macht kein sinn weil die funktion nur 2 parameter hat. :/
kann ich per microsoft detours auch problemlos naked hooks setzen?
ich könnte jetzt nen asm dump posten, aber es macht kein sinn weil die funktion nur 2 parameter hat. :/
kann ich per microsoft detours auch problemlos naked hooks setzen?
ich benutz keine microsoft detours, deswegen ka.
aber 2 parameter geht doch auch, d.h. die beiden parameter kommen über EAX und EDX, den aus edx kriegste ganz normal mit ms fastcall, den aus eax per inline assembler.
Code:
DWORD __fastcall MyFunc(DWORD __UselessECX, DWORD SecondParam)
{
DWORD FirstParam;
__asm mov FirstParam, eax;
// Do whatever you want. In FirstParam ist jetzt der erste Parameter, der 2. in SecondParam
}
musste mal gucken, dass dir der compiler da sicher nicht im funktionsprolog eax überschreibt, sollte aber eigtl nicht passieren.
aber wie gesagt, zeig mal asm dump, dann können wir dir ziemlich genau sagen worauf du achten musst.
ich benutz keine microsoft detours, deswegen ka.
aber 2 parameter geht doch auch, d.h. die beiden parameter kommen über EAX und EDX, den aus edx kriegste ganz normal mit ms fastcall, den aus eax per inline assembler.
Code:
DWORD __fastcall MyFunc(DWORD __UselessECX, DWORD SecondParam)
{
DWORD FirstParam;
__asm mov FirstParam, eax;
// Do whatever you want. In FirstParam ist jetzt der erste Parameter, der 2. in SecondParam
}
musste mal gucken, dass dir der compiler da sicher nicht im funktionsprolog eax überschreibt, sollte aber eigtl nicht passieren.
aber wie gesagt, zeig mal asm dump, dann können wir dir ziemlich genau sagen worauf du achten musst.
danke für deine Bemühung, aber es hat sich gerade erledigt. mit naked Funktion und MS detours geht's einwandfrei.
Quote:
Originally Posted by MrSm!th
Was spricht dagegen, MS Detours mit einer naked Funktion zu nutzen?
ich hätte irgendwo gelesen, dass die MS detours mit naked funktionen nicht klappen, ich habe es soebend ausprobiert und es funktioniert einwandfrei!
Nö, ein jump kann auf jede beliebige Adresse gesetzt werden. Was sich da nun für eine Funktion hinter verbirgt oder ob es gar Daten sind, ist dem Setzer des jumps egal. Bei einer naked Funktion bist halt nur du dafür verantwortlich, dass mit den Registern und dem Stack alles ordentlich vonstatten geht - insofern ist es nicht mehr so ordentlich und sauber wie mit einer wohldefinierten Funktion mit Parametern und Calling Convention. Aber es geht.
[Tutorial] Hooking, Detours, VTable etc. 08/21/2018 - Coding Tutorials - 5 Replies Da man öfters hier im Forum die Frage aufkommen sieht "Wie male ich etwas auf ein Spiel" und "Wie sende ich Tastendrücke an mein spiel?!?111"
Präsentiere ich hiermit stolz pünktlich zu Neujahr mein Tutorial rund ums Hooking, Detours, Searchpattern, VTables etc.
27 Seiten geballte Informationen mit 2 Beispielen für einen DirectInput und einen D3DHook.
Download: HookingTutorial.rar | xup.in
GL & HF
MSVC -__thiscall Implementation 08/13/2013 - C/C++ - 10 Replies Jo, hier einmal die ausgelagerte Version der Diskussion über __thiscall.
Kann jemand was zu der Implementation sagen? Wie schreibt es eigentlich der Standard vor (oder ist __thiscall MS spezifisch)?
Mich wundert vor allem der sinnvolle Hinweis von IntelliSense, dass thiscall bei statischen Methoden nicht zulässig ist, während es der Compiler dennoch annimmt.
Was wäre die eleganteste Methode, echte Klassenmethoden (keinen DX-like C-Nachbau) zu definieren, um sie nutzen zu können, sprich...
msvc++ kann kein projekt erstellen 09/03/2011 - C/C++ - 0 Replies Hey,
Immer wenn ich msvc++ starte und dann auf neues projekt gehe name eingebe steht unten das projekt xx wird erstellt.....fehler beim erstellen des projekts egal was ich mache es geht nicht weg pls help !