probleme bei d3d

02/28/2011 22:49 bammes#16
achso kann es an dem liegen, dass es bei mir net geht?

edit habe jetzt gegoogelt nach endscene hook dynamisch , endscene dynamisch suchen.....

aber ich finde niergend, wo steht wo man des genau macht.
weil leider habe ich Mr Smiths kleine "einführung" net verstanden.

also das mit dynamisch.

geht es ums dynamische suchen der adresse oder muss man was im programmcode ändern?

ahm key habe grad was gefunden
[Only registered and activated users can see links. Click Here To Register...]

meiner ansicht nach ist es das.

gibts auch iwo ne erklärung dazu?

Code:
void D3DHook::Init(BOOL bEnable)
{
	bHooked		= FALSE;
	// Handle (Base) von Renddx9 ermitteln
	HMODULE hRenderer = GetModuleHandle("d3d9.dll");
	
	DWORD* VTableStart = 0; //<-- [COLOR="SandyBrown"]was ist das? ab hier hab ich kein plan was läuft  [/COLOR]
	DWORD lala = dwFindPattern((DWORD)hRenderer, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");
	memcpy(&VTableStart, (void*)(lala+2), 4);

	dwFuncBases[RST] = VTableStart[16];
	dwFuncBases[BS]  = VTableStart[41];
	dwFuncBases[ES]	= VTableStart[42];
	dwFuncBases[SV]  = VTableStart[47];
	dwFuncBases[DIP] = VTableStart[82];

	// Hook ein/ausschalten
	this->SetState(bEnable);
}
03/01/2011 14:41 mydoom#17
Der gepostete Code sucht mithilfe eines Byte-Musters nach dem Anfang der Virtual Method Table (VMT oder manchmal auch VTable genannt) der d3d9.dll und speichert den in einem Zeiger. Was eine VMT genau ist, erklärt Tante Wiki dir liebend gerne: Tabelle virtueller Methoden
03/01/2011 22:08 MrSm!th#18
Außerdem ist es nicht gameunabhängig.
Wenn zwei Games auf deinem PC unterschiedliche DX Versionen nutzen musst du für jede die Adresse neu suchen.

Und das was du da geposted hast ist eine und meiner Meinung nach die beste, dynamische Möglichkeit, EndScene zu hooken.
Es wird mit dwFindPattern nach den angegebenen Bytes gesucht; die sind Teil einer VTable in der d3d9.dll.
An der gefundenen Adresse + 2 ist die Adresse der VTable, in der die Adressen von allen Methoden des IDirect3DDevice9 Interface.
03/01/2011 22:38 bammes#19
ah

muss ich dafür extra sachen includen?

oder die funktion dwFindPattern und die ganzen variabeln selber erstellen?