2016-09-01 2 views
0

У меня есть значение HMODULE, которое равно: 00007FF695820000, и мне нужно, чтобы оно было 0x7FF695820000, но поскольку значение - это правильное шестнадцатеричное значение, преобразующее его в шестнадцатеричный, это делает его еще большим шестнадцатеричным значением.Как использовать HMODULE в качестве значения DWORD/Hex? (C++)

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

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

+0

Как «преобразование его в шестнадцатеричный просто делает его еще большим шестнадцатеричным значением»? –

+0

Это 64-битные номера, оставьте их. Рассматривайте их как 'void *' и 'HANDLE'. Покажите остальную часть кода. –

+0

«Кто-нибудь знает, как я могу просто добавить 0x в начало» - вы уверены, что понимаете разницу между представлением и фактическим значением. Вы обрабатываете номер так, как будто он хранится в виде строки внутри памяти. Шестигранные и десятичные числа - это просто строчные ПРЕДСТАВЛЕНИЯ номеров. Число одинаковое. – sashoalm

ответ

0

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

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

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

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

+0

Привет большое спасибо, что отлично сработало :) – Tom

+0

@Tom Приятно слышать. Если мой ответ вам полезен, примите его, указав его на левой стороне – Nikita

Смежные вопросы