helldrg
-
Постов
142 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные helldrg
-
-
Всем привет, в уроке [gamehacking] D3D9 hook - Часть 2 в функции : GetDevice9Method есть строка
DWORD* vtablePtr = (DWORD*)(*((DWORD*)d3dDevicee)); которая в одних примерах работает, а в других крашит процесс, подскажите, что делать, что бы не крашило
Указатель на D3DDevice
in Низкоуровневое программирование
Опубликовано
Судя по нику вы создатель этих уроков, я поклонник вашего творчества, желаю успехов в дальнейшем творчестве =)
А теперь по делу, у вас есть видео где вы курочете d3d приложение, я пробовал с ollydbg 1.1 и 2.01, но код(asm) у меня в отладчике сильно отличается от вашего и из-за этого я не смог разобраться в основах. Кроме кода у вас еще функции все выделены, а у меня нет. Может это плагины или еще что то я к сожалению не знаю. Вот код:
void CopyVMT9(DWORD* vtableFrag) { HWND hWnd = CreateWindowA("STATIC", "dummy", 0, 0, 0, 0, 0, 0, 0, 0, 0); HMODULE hD3D9 = GetModuleHandleA("d3d9"); DIRECT3DCREATE9 Direct3DCreate9 = (DIRECT3DCREATE9)GetProcAddress(hD3D9, "Direct3DCreate9"); // это можно но закоментить и подключить библиотеку d3d9.lib IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION); D3DDISPLAYMODE d3ddm; d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp)); d3dpp.Windowed = 1; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; IDirect3DDevice9* d3dDevicee = 0; d3d->CreateDevice(0, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3dDevicee); DWORD* vtablePtr = (DWORD*)(*((DWORD*)d3dDevicee));// в этом месте крашит программу после инжекта printf("gfg\n"); for (int i = 0; i < 4; i++) { vtableFrag[i] = vtablePtr[i + 6]; } d3dDevicee->Release(); d3d->Release(); DestroyWindow(hWnd); }
Я тестил не на игре, а на простом приложении, если надо могу проект скинуть или exe написано на VS13, может кода хватить: