【发布时间】:2017-11-11 21:57:33
【问题描述】:
ReadProcessMemory的正确使用方法是什么?
我目前是这样使用的:
DWORD read_mem(DWORD addr)
{
DWORD buffer = 0x0;
if (!ReadProcessMemory(phandle, LPCVOID(addr), &buffer, sizeof(DWORD), nullptr))
{
return false;
}
return buffer;
}
由于addr 被错误地转换,这会导致警告。
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
我见过的其他示例代码,例如 this 使用相同的方法。
那么在不收到警告的情况下使用此功能的正确方法是什么?
【问题讨论】:
-
广告地址是一个指针。您为什么决定使用 DWORD?你明白这个警告吗?如果不是,为什么在理解警告之前询问解决方案?你是想了解,还是只是想让别人为你写程序。
-
@DavidHeffernan 抱歉,如果措辞有误,我不是以英语为母语的人。我在问哪种类型最适合在这里使用。例如,您可以使用
INT_PTR作为地址,但这是正确的选择吗? -
我会用一个指针来表示一个指针
-
对于指针需要使用
PVOID或者如果需要算术运算(添加、比较) -PBYTE或ULONG_PTR。您的警告是因为大小不同。有时,当需要将DWORD d转换为指针时,需要使用 2 类型强制转换以避免警告 -(PVOID)(ULONG_PTR)(d)。在basetsd.h中查找ULongToPtr实现。但是需要非常注意符号扩展或零扩展 4 字节DWORD到 8 字节PVOID- 这可能会产生非常严重的错误
标签: c++ windows winapi memory readprocessmemory