Преобразование из шестнадцатеричного в LPCVOID обрезает половину адреса - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь прочитать (и в конце концов записать) память другого процесса.У меня есть адрес (найден с помощью чит-движка), и я хочу прочитать его значение из моей программы, но я не получаю ожидаемое значение.Адрес 274A88A1630, но когда я конвертирую его в LPCVOID (который требуется для ReadProcessMemory), я получаю только A88A1630 (который не указывает на нужную память)

Я пытался конвертировать, используя (LPCVOID)и (void*), оба дают одинаковый результат

int val = 0;
ReadProcessMemory(handle, (void*)0x274A88A1630, &val, sizeof(val), 0);
cout << val <<endl;

1 Ответ

1 голос
/ 04 мая 2019

Это происходит потому, что вы скомпилировали свое приложение как двоичный файл x86 (32-битный / Win32). Указатели (void* в данном случае) 32-разрядные на x86. Указатели на x64 (64 бит / Win64) являются 64 битами. 0x274A88A1630 - это 64-битное значение, поэтому вы не столкнетесь с этой проблемой, если скомпилируете свое приложение для x64 (64 бит / Win64).

TLDR; Значение указателя более 32 бит усекается до 32 бит при компиляции для x86.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...