【发布时间】:2013-07-17 10:50:47
【问题描述】:
所以最近我一直在处理 WinAPI 的 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;
}
AFAIK,标准说uintptr_t 是一个整数类型,它能够在不改变指针值的情况下保存指针。由于它是一个整数,我应该能够在其中存储 0x1234。该标准还规定,reinterpret_cast 将 uintptr_t 转换为 void* 也会使值保持不变。
【问题讨论】: