Überschreiben von Funktionen in C#

29/08/2009 - 19:02 von Hans Kloss | Report spam
Hallo Entwickler,

zur Zeit beschàftige ich mich mit "API Hooking" (ich denke ihr wisst was
gemeint ist) in C#. Ich habe es geschafft eine in C# geschriebene DLL
Bibliothek in den Prozess eines Spiels zu injizieren (auf Englisch heißt das
"DLL injection" ;-)). Ich möchte die Funktionen von DirectX "übernehmen", so
dass zuerst meine Funktion aufgerufen wird. Danach kann ich zum Beispiel
etwas selber auf dem Bildschirm zeichnen und dann den Aufruf ganz normal an
die Originalfunktionen weiterleiten, so dass das Spiel damit weiterhin
normal arbeiten kann.

Das klappt aber leider nicht :-/

Meine Methode ist die folgende: ich starte das Spiel als suspendiert.
Iniziere meine DLL und warte bis die DLL mit DirectX Funktionen geladen
wird. Ich erhalte einen Pointer darauf.

Hier geht es los. Ich schaffe es immer Direct3DCreate9() zu übernehmen (oder
zu entführen, hijack im Englischen ;-)). Zur Injektion der DLL benutze ich
EasyHook (http://www.codeplex.com/easyhook).
http://pastebin.com/f42f5d35c

Es geht weiter. Meine Funktion OverrideFunctions() sollte die virtuellen
Funktionen überschreiben. Vor allem zwei der 17 möglichen, GetAdapterCount()
und CreateDevice().
http://pastebin.com/f1e050b13

Zusàtzlich benutze ich noch die folgende Klasse. Das aber nur der
Vollstàndigkeit halber hier verlinkt.
http://pastebin.com/f609a981c

Jetzt zum Problem: meine in OverrifeFunctions() überschriebenen Methoden
werden nie ausgeführt. GetAdapterCount() und auch CreateDevice() (im
verlinkten Code nicht zu sehen, aber das prinzip ist das gleiche wie bei
GetAdapterCount()) werden vermutlich nie überschrieben und das obwohl ich
keine Exceptions bekomme.

Kann hier jemand helfen?
Was mache ich falsch?
Hat jemand funktionierende Codebeispiele?
Kann ich irgendwie prüfen warum es nicht klappt?

Freundliche Grüße
Hans
 

Lesen sie die antworten

#1 Kerem Gümrükcü
31/08/2009 - 19:53 | Warnen spam
Hallo Hans,

schau Dir bitte mal die Detours-Library von
Microsoft an:

[Detours]
http://research.microsoft.com/en-us...s/detours/

Da sind auch Beispiele, wobei es hier eher um das
Verstàndis geht, was Du dadurch erlangen sollst,...

Grüße

Kerem

Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."

Ähnliche fragen