IDirect3DDevice9 cast Probleme

MedRamBO

Mitglied
Hallo,

ich versuche jetzt seit einiger Zeit innerhalb eines D3D Hooks ( Endscene ), den raw Offset von einem anderen Member, in diesem Fall Beginscene zu ermitteln.

Stellt euch das wie folgt vor:
Code:
//Template
template<class CL> void bla(CL Member)
{
	DWORD method_addy = 0;
	_asm mov ECX, Member
	_asm mov method_addy, ECX
	log("InterfaceMethod: %X",method_addy);
}

//Hook
HRESULT hEndscene( LPDIRECT3DDEVICE9 pDevice )
{
	bla( &IDirect3DDevice9::Beginscene );

        return orginalEndscene( pDevice );
}

Ich renne das ganze unter Vista 64 Bit Ultimate und es handelt sich halt um einen simplen Hook mit template zum casten des members.
Leider hat sich der gewünschte Erfolg nicht eingestellt, da die Logfile nur folgenden Wert erhält:
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24
17FB24

Das kann allein schon nicht stimmen da die Modulebase sich viel höher befindet.

Ich bitte inständig um Hilfe nachdem ich und 1 weiterer Programmierer bereits gescheitert sind.

Danke,
Frank
 
Hallo Frank,

da es sich bei IDirect3DDevice9::BeginScene um eine virtuelle Methode handelt, müsstest du schon in der vtable nachschauen, um die Adresse der Funktion für eine bestimmte Instanz einer Unterklasse zu erhalten. Falls eigentlich etwas ganz anderes dein Anliegen ist, müsstest du vielleicht nochmals genauer erklären, was du erreichen willst.

Grüße, Matthias
 
Mein Ziel ist es die Addressen von verschiedenen Membern des IDirect3DDevice's zu erhalten, sodass ich OS unabhängig ( XP, Vista ) immer an der richtigen Stelle einen Detour/Hook einfügen kann, ohne für jede DirectX Version neue RVA Offsets zu suchen.

Klar gibt es andere Möglichkeiten, z.B. CreateDevice Hook etc. Diese möchte ich aber nicht benutzen.

Ich dachte ich könnte mir wie ich es getan habe direkt den richtigen Offset für die Instanz holen.

Gruß,
Frank
 
Mein Ziel ist es die Addressen von verschiedenen Membern des IDirect3DDevice's zu erhalten, sodass ich OS unabhängig ( XP, Vista ) immer an der richtigen Stelle einen Detour/Hook einfügen kann, ohne für jede DirectX Version neue RVA Offsets zu suchen.

[...]

Ich dachte ich könnte mir wie ich es getan habe direkt den richtigen Offset für die Instanz holen.
IDirect3DDevice ist ein Interface und enthält als solches nur rein virtuelle Methoden. Um an die Adresse einer Methode für eine bestimmte Instanz (einer Unterklasse) von IDirect3DDevice zu kommen, müsstest du also in der vtable für dieses Objekt an der passenden Stelle nachschauen.

Grüße, Matthias
 
Zurück