2016-04-09 11 views
0

私はC++とDLLを注入して遊んでいましたが、かなり新しいですが、かなり早く学びました。私はEndSceneをフックしようとしているだけで、それを動作させることはできません。私はそれを見つけて、それをフックするパターンスキャンを使用してみました、私は疑似d3dデバイスを作成し、そのVTableを介してEndSceneを見つけることを試みました。失敗するたびにアクセス違反が発生するため、関数のアドレスが間違っていると仮定するか、まったく何かを失っているかもしれません。私はさまざまな方法を試しましたが、知識が限られているためにもう少し助けが必要です。D3D EndSceneを試してみた

DWORD dEndScene = 0x10066D50; 
HMODULE hBaseAddress = GetModuleHandle("d3d9.dll"); 

BYTE* pEndFunction = (BYTE*)reinterpret_cast<uintptr_t>(hBaseAddress); 
pEndFunction = pEndFunction + dEndScene; 

fEndScene = (oEndScene)DetourFunction(pEndFunction, (PBYTE)EndScene); 

答えて

0

vtableが書き込み保護されている可能性があります。 VirtualProtectを使用できます。

そして、いくつかのわずかに異なるアプローチ:

それはその作成前にDirect3DCreate9(例)を交換することは可能ですか?次に、必要なインターフェイス用のプロキシオブジェクトを作成するだけで、正常に委譲したり、前/後の処理をしたり、まったく異なる処理を行うことができます。

また、IDirect3DDevice9インスタンスポインターを取得して参照するvtableを取得しても(これはVirtualProtectですが、さまざまな場合に変更される可能性のある関数の場所を事前に知る必要はありません)。