2010-12-02 5 views
2

Je dois faire un peu de lecture de la mémoire dans un jeu et une injection. Cependant, pour éviter les conditions de course, j'ai besoin d'injecter mon code ASM dans l'endscene.Hooking Direct X Endscene dans Direct X 11 jeu

Auparavant j'ai utilisé ce code:

uint D3D9_Device; 
D3D9_Device = Memory.Read<uint>(Memory.BaseAddress + Direct3D9__Device); 
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetA); 
D3D9_Device = Memory.Read<uint>(D3D9_Device); 
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetB); 

Pour accéder au périphérique DX9, et trouvez le EndScene en utilisant les compensations renversées.

Cependant, dans Windows 7, directx 11 est forcé, ce qui signifie que cette lecture échoue et donne un objet nul.

Une idée de comment je pourrais effectuer un crochet dans la fin d'une partie lorsque DirectX 11 est utilisé?

Répondre

0

Vous devez être accrochage IAT GetProcAddress et appelle D3DCreate, en capturant le pointeur de périphérique et en accrochant le VFTable à partir de là. ne sais pas comment vous avez inversé the COM vftable offsets(these are predefined by how COM dlls are build, you need only count up the virtual methods defined in the DX SDK headers, start at 0, then multiply by sizeof (INT_PTR) `pour obtenir le décalage), mais la façon dont vous les lisez est également fausse (vous avez un trop d'indirections). Essayez de regarder quelque chose comme MSDetours, il a un exemple sur l'accrochage d'objet COM. vous pouvez également donner this question une lecture à travers trop