
03.07.2016, 17:16
|
|
Постоянный
Регистрация: 10.07.2015
Сообщений: 642
С нами:
5706781
Репутация:
43
|
|
Не работает чет. Вроде должно, заменяем функцию Present (VTable[17]) на свою и в своей вызываем оригинал. До этого в другом плагине делал так же, все работало.
C++:
Код:
DWORD dwOriginal
=
0x0
;
__declspec
(
naked
)
void
hook
(
)
{
__asm pushad
__asm pushfd
Log
(
"work"
)
;
__asm popfd
__asm popad
__asm jmp
[
dwOriginal
]
}
void
init
(
)
{
Log
(
"init"
)
;
while
(
(
*
(
IDirect3DDevice9
*
*
)
0xC97C28
)
==
nullptr
)
Sleep
(
100
)
;
IDirect3DDevice9
*
Device
=
*
(
IDirect3DDevice9
*
*
)
0xC97C28
;
Log
(
"%X"
,
Device
)
;
DWORD
*
VTable
=
(
DWORD
*
)
*
(
DWORD
*
)
Device
;
Log
(
"%X"
,
VTable
)
;
MEMORY_BASIC_INFORMATION mbi
;
VirtualQuery
(
(
LPCVOID
)
VTable
,
&
mbi
,
sizeof
(
mbi
)
)
;
VirtualProtect
(
mbi
.
BaseAddress
,
mbi
.
RegionSize
,
PAGE_READWRITE
,
&
mbi
.
Protect
)
;
Log
(
"Start hook."
)
;
dwOriginal
=
VTable
[
17
]
;
VTable
[
17
]
=
(
DWORD
)
hook
;
Log
(
"Finish hook."
)
;
VirtualProtect
(
mbi
.
BaseAddress
,
mbi
.
RegionSize
,
mbi
.
Protect
,
&
mbi
.
Protect
)
;
}
|
|
|