最近我在处理WinAPI的
考虑到这一点,这个整数转指针的转换是否正确的C++代码(没有未定义的行为等):
据我所知,标准规定
WriteProcessMemory
和ReadProcessMemory
,它们都将LPVOID
作为第二个参数,这是我们要从另一个进程的内存中读取的实际地址。考虑到这一点,这个整数转指针的转换是否正确的C++代码(没有未定义的行为等):
#include <windows.h>
int main()
{
WriteProcessMemory(/*...*/,
//want to read from memory address 0x1234 in the target process
reinterpret_cast<void*>(static_cast<uintptr_t>(0x1234)),
/*...*/);
return 0;
}
据我所知,标准规定
uintptr_t
是一种整数类型,能够容纳指针而不改变指针的值。由于它是一个整数,我应该能够将0x1234存储在其中。标准还说,将uintptr_t
重新解释为void*
也会保持值不变。
reinterpret_cast<uintptr_t>(static_cast<void *>(p))
,然后打印该值-那么是的。 - bbonev(void*)0x80000000
发生的事情很好奇。我不确定它是否做了正确的事情。 - Mooing Duck0x1234567812345678
会自动扩展,避免了这个问题。此外,(void *)0x80000000ULL
也可以避免这个问题。 - Mooing Duck