Как использовать HMODULE в качестве значения DWORD/Hex? (С++)

У меня есть значение HMODULE, равное: 00007FF695820000, и мне нужно, чтобы оно было 0x7FF695820000, но поскольку значение является правильным шестнадцатеричным значением, преобразование его в шестнадцатеричное просто делает его еще большим шестнадцатеричным значением.

Кто-нибудь знает, как я могу просто добавить 0x в начало или заставить мой ReadProcessMemory думать, что это шестнадцатеричное значение, а не десятичное значение.

Причина, по которой это переменная HMODULE, заключается в том, что я использую ее для получения базового адреса для Solitare.exe, но в настоящее время не могу прочитать из нее адреса, потому что моя ReadProcessMemory просто сначала преобразует ее в шестнадцатеричный формат, поэтому считывает неправильный адрес.


person Tom    schedule 01.09.2016    source источник
comment
как преобразование его в шестнадцатеричное значение делает его еще большим шестнадцатеричным значением?   -  person phuclv    schedule 01.09.2016
comment
Это 64-битные числа, оставьте их в покое. Рассматривайте их как void* и HANDLE. Покажите остальную часть кода.   -  person Barmak Shemirani    schedule 01.09.2016
comment
Кто-нибудь знает, как я могу просто добавить 0x в начало - вы уверены, что понимаете разницу между представлением и фактическим значением. Вы обрабатываете число так, как будто оно хранится в виде строки в памяти. Шестнадцатеричные и десятичные числа - это просто строковые ПРЕДСТАВЛЕНИЯ чисел. В остальном номер тот же.   -  person sashoalm    schedule 01.09.2016
comment
@ Lưu Vĩnh Phúc Это увеличивает шестнадцатеричное значение, потому что Visual Studio считает, что это десятичное число.   -  person Tom    schedule 02.09.2016


Ответы (1)


Указанный адрес 00007FF695820000 представляет собой uint64_t целое число. Для вызова функции нужно заботиться о типе переменной, а не о ее визуальном представлении.

Вы можете прочитать память процесса следующим образом:

UINT_PTR addr = (UINT_PTR)GetModuleHandle("Solitare.exe");
ReadProcessMemory(hProc, (void*)addr, pBuffer, nSize, &BytesRead);

Чтобы использовать ReadProcessMemory, ваш hProc дескриптор должен иметь разрешение на доступ PROCESS_VM_READ.

person Nikita    schedule 01.09.2016
comment
@ Том Приятно слышать. Если мой ответ полезен для вас, примите его, пожалуйста, поставив галочку слева - person Nikita; 03.09.2016