Hey guys CheatEngineで既に知っているプロセスからいくつかのメモリを取得したいと思います。スキャンする領域(0x190D186FF-> 0x190D1870A)を定義しましたが、アドレスが大きすぎて単純なintに格納できませんでした。だから私は__int64を使うのですが、その修正ReadProcessMemoryはアドレスをもう処理していないようです。ReadProcessMemory with __int64 address
私はVirtualProtectExとReadProcessMemoryのための3回の警告を得たコンパイル:私はメモリから本当に大きなアドレスを読み取ることができ
どのように異なるサイズの整数からポインタにキャスト?
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");
}
64ビットプロセスとしてコンパイルする必要があります。 – Ben
私は64ビットOSだから、デフォルトでは64bプロセスをコンパイルすると思います。 (+ iは-m64で試してみると、実装されていない:blablablaでコンパイルされていない64ビットモード) –