解析編
解析して得られた結果のまとめ
- 関数
- 0x0040E000 (0x0040B350)
- 0x0040E850 (0x0040BBA0)
- 0x0040E880 (0x0040BBD0)
- 0x0040E890 (0x0040BBE0)
- 0x00473490 (0x004753D0)
- 0x00625C10 (0x00618C30)
注:
()内のアドレスはRichardBurnsRally_NoSSE.exeの場合です。
関数
0x0040E000 (0x0040B350)
戻り値:LPDIRECT3DDEVICE9?
呼出し規約:__thiscall
引数:this
LPDIRECT3DDEVICE9 を返すと思われる関数だが、このままでは使えない。
そこで、0x0044A598, 0x0044A59D, 0x0044A5A6の命令を見ればわかるが、
DWORD pointer; LPDIRECT3DDEVICE9 d3ddev; memmove( (void*)&pointer, (const void*)(0x007EA990), sizeof(void*) ); memmove( (void*)&pointer, (const void*)(pointer + 0x28), sizeof(void*) ); memmove( (void*)&d3ddev, (const void*)(pointer + 0xF4), sizeof(LPDIRECT3DDEVICE9) );
あるいは
*(DWORD*)( *(DWORD*)(*(DWORD*)0x007EA990 + 0x28) + 0xF4 )
のようにすれば取得できるはず。
注:NoSSE の場合は 0x007EA990 を 0x007ECAD0 にすべし。
0x0040E850 (0x0040BBA0)
戻り値:HRESULT?
呼出し規約:__thiscall
引数:this, UINT, DWORD, D3DFORMAT, D3DPOOL, IDirect3DIndexBuffer9**, HANDLE* ?
IDirect3DDevice9::CreateIndexBuffer を呼び出しているらしい。
0x0040E880 (0x0040BBD0)
戻り値:HRESULT?
呼出し規約:__thiscall
引数:this
IDirect3DDevice9::BeginScene を呼び出している。
0x0040E890 (0x0040BBE0)
戻り値:HRESULT?
呼出し規約:__thiscall
引数:this
何かの初期化の後、IDirect3DDevice9::EndScene を呼び出している。
0x00473490 (0x004753D0)
戻り値:int
呼出し規約:__stdcall
引数:HINSTANCE, HINSTANCE, LPSTR, int ?
WinMainらしい。
0x00625C10 (0x00618C30)
戻り値:bool?
呼出し規約:__thiscall
引数:this, char* ?
プラグインの読み込みらしい。
LoadLibraryA、GetProcAddressが呼び出されている (文字列"RBR_CreatePlugin"もここにある)ので、 プラグインはここでロードされると思われる。 RBR_CreatePlugin(IPlugin* RBR_CreatePlugin( IRBRGame* ))の 呼び出しも行なっているっぽい。
- 最終更新:2010-08-09 22:20:00