![]() |
Direct3D hook
Hi, ich versuche gerade einen Hook zu schreiben für meine Direct3D8-Anwendung. Da die d3d8.dll keine Exports der einzelnen Funktionen hat, muss ich erst über Direct3DCreate8 hooken und dann iwie IDirect3D8 .. dazu weiß ich aber nicht ganz, wie ich das anstellen soll. Wäre schön, wenn ihr mir sagt, wie ich weiter vorgehen soll. Ich poste mal meinen momentanen Code. Leider funktioniert mein Code so auch nicht richtig. Bekomme nen Error vom Beziehen einer Adresse :| Hoffe ihr könnt mir weiter helfen.
Delphi-Quellcode:
library Project1;
uses SysUtils, windows, GenCodeHook, Direct3D8, d3dx8, funcs in 'funcs.pas'; {$R *.res} type Direct3DCreate8 = function( D3D_SDK_VERSION : cardinal ): IDirect3D8; stdcall; var oDirect3DCreate8 : Direct3DCreate8; pIDirect3D8 : IDirect3D8; //Die neue Funktion function pDirect3DCreate8( D3D_SDK_VERSION : cardinal ): IDirect3D8; stdcall; begin pIdirect3D8 := oDirect3DCreate8( D3D_SDK_VERSION ); if pIdirect3D8 <> nil then Writelog('Direct3DCreate8 gehookt!'); result := pIDirect3D8; end; procedure dllmain(dwReason: integer); // Wird gecalled, wenn der Prozess die dll lädt / unlädt var module : HMODULE; begin case dwreason of 1: begin // Wenn die dll geladen wurde, alles laden, was benötigt wird //Die Adressen aus der D3D8.dll beziehen module := GetModuleHandle('D3D8.dll'); //Detour. CreateGenericCodeHook( GetProcAddress(module,pchar('Direct3DCreate8')), @pDirect3DCreate8, @oDirect3DCreate8 ); end; 0: begin // Wenn die dll wieder entladen wird //Die original Funk wieder laden RemoveGenericCodeHook(@oDirect3DCreate8); end; end; end; begin DLLProc := @DLLMain; // Einsteigspunkt setzen DLLMain(1); // DllMain callen end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz