Показать сообщение отдельно

  #2  
Старый 18.09.2021, 14:37
#Northn
Флудер
Регистрация: 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
)
;
}
 
Ответить с цитированием