
18.09.2021, 14:37
|
|
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами:
4609424
Репутация:
183
|
|
Сообщение от vbg
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
Код:
mem
.
setint8
(
0x969152
,
1
,
false
)
На с++ получилось что такое:
функция для записи в память:
Код:
template
void
writeMem
(
DWORD address
,
T value
)
{
DWORD oldProtect
=
0
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
WriteProcessMemory
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
&
value
,
sizeof
(
value
)
,
0
)
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
oldProtect
,
NULL
)
;
}
дальше вызываю в коде:
вызов функции в коде:
Код:
unsigned
char
driveOnWater
=
1
;
writeMem
(
0x969152
,
driveOnWater
)
;
Ну и не работает кароче. Изменяю память в цикле.
Сообщение от vbg
mem.setint8(0x969152, 1, false)
последний аргумент -- false, соответственно протекцию снимать не нужно.
Значит, тебе достаточно просто использовать это:
C++:
Код:
*
reinterpret_cast
(
0x969152
)
=
1
;
А так, если ты хочешь повторить код как на луа:
C++:
Код:
template
void
writeMem
(
uintptr_t address
,
T value
,
bool
unprotect
=
false
)
{
DWORD old_protection
;
auto
address_
=
reinterpret_cast
(
address
)
;
if
(
unprotect
)
VirtualProtect
(
address_
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
old_protection
)
;
memcpy
(
&
value
,
address_
,
sizeof
(
value
)
)
;
if
(
unprotect
)
VirtualProtect
(
address_
,
sizeof
(
value
)
,
old_protection
,
&
old_protection
)
;
}
|
|
|