Привет, ребята, я хочу получить немного памяти из процесса, который я уже знаю с CheatEngine. Я определил область, которую хочу сканировать (0x190D186FF->0x190D1870A), но адрес слишком велик для хранения в простом int. Вот почему я использую __int64, но с этой модификацией ReadProcessMemory больше не обрабатывает адрес.
При компиляции я получил 3 предупреждения для VirtualProtectEx и ReadProcessMemory: приведение к указателю из целого числа разного размера
Как я могу прочитать действительно большой адрес из памяти?
int main( int argc, char *argv[] ) {
HWND hWnd;
DWORD PID;
HANDLE hProc;
__int64 address;
char mem = 0;
PDWORD oldProtect = 0;
int valid = 0;
char inputPID[4];
printf( "What is the program PID ?\n" );
fgets( inputPID, sizeof( inputPID ), stdin );
PID = (DWORD)atoi( inputPID );
hProc = OpenProcess( PROCESS_VM_READ, false, PID );
if ( !hProc ) {
printf( "Error: Couldn't open process '%i'\n", PID );
return 0;
}
for ( address = 0x190D186FF; address <= 0x190D1870A; address++ ) {
VirtualProtectEx( hProc, (PVOID)address, (SIZE_T)sizeof( address ), PAGE_READONLY, oldProtect );
valid = ReadProcessMemory( hProc, (PCVOID)address, &mem, (DWORD)sizeof( char ), NULL );
if ( valid ) {
printf( "Memory value at 0x%I64x: '%c'\n", address, mem );
}
VirtualProtectEx( hProc, (PVOID)address, (SIZE_T)sizeof( address ), (DWORD)oldProtect, NULL );
}
system( "pause" );
}