嘿家伙我想从我已经知道的一个过程中获得一些记忆与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) –