从十六进制转换为LPCVOID会切断地址的一半

时间:2019-05-04 16:26:49

标签: c++ winapi memory process memory-address

我正在尝试读取(并最终写入)另一个进程的内存。我有地址(使用作弊引擎找到),并且想从程序中读取它的值,但是没有得到期望的值。地址是274A88A1630,但是当我将其转换为LPCVOID(ReadProcessMemory要求)时,我只会得到A88A1630(未指向我想要的内存)

我尝试使用(LPCVOID)(void*)进行转换,它们都给出相同的结果

int val = 0;
ReadProcessMemory(handle, (void*)0x274A88A1630, &val, sizeof(val), 0);
cout << val <<endl;

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为您已将应用程序编译为x86(32位/ Win32)二进制文件。指针(在这种情况下为void*)在x86上为32位。 x64(64位/ Win64)上的指针是64位。 0x274A88A1630是64位值,因此,如果您为x64(64位/ Win64)编译应用,则不会遇到此问题。

TLDR;为x86编译时,超过32位的指针值将被截断为32位。