Игра Соединение Direct X Endscene в Direct X 11 - PullRequest
2 голосов
/ 02 декабря 2010

Мне нужно сделать чтение памяти в игре и сделать укол.Однако, чтобы избежать условий гонки, мне нужно ввести свой код ASM в конечную сцену.

Ранее я использовал этот код:

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);

Для доступа к устройству Dx9 и поиска конечной сценыс использованием обратных смещений.

Однако в Windows 7 принудительное выполнение DirectX 11 означает, что это чтение завершается неудачно и дает нулевой объект.игры, когда используется DirectX 11?

1 Ответ

0 голосов
/ 02 декабря 2010

Вы должны перехватывать IAT GetProcAddress и вызывать D3DCreate, захватывать указатель устройства и оттуда перехватывать VFTable.Не знаю, как вы «перевернули» смещения vftable COM (они предопределены тем, как создаются dll COM, вам нужно только подсчитать виртуальные методы, определенные в заголовках DX SDK, начать с 0, затем умножить на sizeof(INT_PTR), чтобы получить смещение), но то, как вы их читаете, тоже выглядит неправильно (у вас слишком много косвенных указаний).

Попробуйте взглянуть на что-то вроде MSDetours , у него есть пример перехвата COM-объекта.Вы также можете прочитать этот вопрос тоже прочитать

...