Вопрос LPCVOID и BYTE* в чем разница при чтение памяти

  • Автор темы Автор темы ammoiff
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
3 Сен 2023
Сообщения
11
Реакции
0
Приветствую всех в чем разница и почему для чтение памяти процессе , в одной статье используется LPCVOID , а в уроках guidehacking используется указатель на BYTE

Вот пример:
C++:
Expand Collapse Copy
ReadProcessMemory(hProcess, (BYTE*)addr, &tempValue, sizeof(tempValue), nullptr);
C++:
Expand Collapse Copy
ReadProcessMemory(hProcess, (LPCVOID)addr, &tempValue, sizeof(tempValue), nullptr);

Результат при чтение один и тот же для разных типов.
LPCVOID - это просто указатель на какие-то константные данные любого типа.
А BYTE* - указывает на память, в которой каждый байт может быть использован для хранения информации.

Так в чем разница и что лучше стоит использовать, и почему
 
Приветствую всех в чем разница и почему для чтение памяти процессе , в одной статье используется LPCVOID , а в уроках guidehacking используется указатель на BYTE

Вот пример:
C++:
Expand Collapse Copy
ReadProcessMemory(hProcess, (BYTE*)addr, &tempValue, sizeof(tempValue), nullptr);
C++:
Expand Collapse Copy
ReadProcessMemory(hProcess, (LPCVOID)addr, &tempValue, sizeof(tempValue), nullptr);

Результат при чтение один и тот же для разных типов.
LPCVOID - это просто указатель на какие-то константные данные любого типа.
А BYTE* - указывает на память, в которой каждый байт может быть использован для хранения информации.

Так в чем разница и что лучше стоит использовать, и почему
абсолютно никакой разницы, в любом случае у тебя это просто каст игрового адресса к указателю
 
  • Люблю это
Реакции: mxrz
При использовании ReadProcessMemory нет никакой разницы
 
BYTE* = unsigned char*
LPCVOID = const char void*

Ты передаёшь тип как указатель. Функция в которой они передаётся в любом случае вынуждена читать по размеру указателя (x86 - 4 байта, x64 - 8 байт). Единственное что - при разименовании указателя тебе вернёт тот тип, который указан и это уже может сделать разницу. В чём же разница? В том что разные типы данных имеют разные размеры. Но ReadProcessMemory всё равно принимает void*, так что чтение происходит под размеру указателя. Значит разницы никакой нет.

Кратко: ReadProcessMemory и большинство функций WINAPI принимают указатели на память. Значит внутри они читают память по размеру указателя (x86 - 4 байта, x64 - 8 байт), значит вообще плевать какой тип ты передашь, хоть ULONGLONG*. Основной поинт в том что используется указатель, а не сам тип.
 
(BYTE*)addr treats addr as a pointer to bytes
(LPCVOID)addr treats addr as a pointer to constant data of any type
there is no functional difference between the two pieces of code you provided it just comes down to both your code style as well as the readability of your code
 
Назад
Сверху Снизу