|
You last visited: Today at 02:36
Advertisement
MSVC Detours hooking Borland __fastcall
Discussion on MSVC Detours hooking Borland __fastcall within the C/C++ forum part of the Coders Den category.
10/18/2013, 14:37
|
#1
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
MSVC Detours hooking Borland __fastcall
hi,
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?
mfg
|
|
|
10/18/2013, 16:20
|
#2
|
elite*gold: 1329
Join Date: Jun 2009
Posts: 1,873
Received Thanks: 960
|
afaik werden die Parameter einfach genau anders rum übergeben.
Sprich C++ wäre
Code:
ret __fastcall(p1,p2,p3);
// gelesen als p1,p2,p3
Borland/Embarcadero (Delphi?) wäre
Code:
function __fastcall(p1,p2,p3) : ret;
// gelesen als p3,p2,p1
Wenn du das kompensierst, sollte es theoretisch funktionieren.
|
|
|
10/18/2013, 16:35
|
#3
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
Quote:
Originally Posted by マルコ
afaik werden die Parameter einfach genau anders rum übergeben.
Sprich C++ wäre
Code:
ret __fastcall(p1,p2,p3);
// gelesen als p1,p2,p3
Borland/Embarcadero (Delphi?) wäre
Code:
function __fastcall(p1,p2,p3) : ret;
// gelesen als p3,p2,p1
Wenn du das kompensierst, sollte es theoretisch funktionieren.
|
gibt auch nur eine access violation, aber umgedreht wird nichtmal mehr das packet ausgelesen.
der selbe hook compiliert in borland klappt einwandfrei.
|
|
|
10/18/2013, 16:55
|
#4
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
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.
|
|
|
10/18/2013, 17:08
|
#5
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
Quote:
Originally Posted by Dr. Coxxy
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?
|
|
|
10/18/2013, 17:22
|
#6
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
Quote:
Originally Posted by BrendonHomo
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.
|
|
|
10/18/2013, 19:02
|
#7
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Was spricht dagegen, MS Detours mit einer naked Funktion zu nutzen?
|
|
|
10/18/2013, 20:15
|
#8
|
elite*gold: 0
Join Date: Apr 2009
Posts: 177
Received Thanks: 42
|
Quote:
Originally Posted by Dr. Coxxy
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!
|
|
|
10/19/2013, 12:07
|
#9
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
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.
|
|
|
 |
Similar Threads
|
[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 !
|
All times are GMT +1. The time now is 02:37.
|
|