嘿傢伙我想從我已經知道的一個過程中獲得一些記憶與CheatEngine。我定義了一個我想掃描的區域(0x190D186FF-> 0x190D1870A),但地址太大而無法存儲在簡單的int中。這就是爲什麼我使用__int64,但修改ReadProcessMemory似乎不再處理地址。ReadProcessMemory與__int64地址
我編譯時有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");
}
您需要編譯爲64位進程。 – Ben
我在一個64位的操作系統,所以我想默認編譯一個64b進程。 (+我嘗試了-m64,我得到了「未實現:64位模式未編譯blablabla) –