c++ - ReadProcessMemory 总是读取 0
问题描述
我正在为一个小游戏创建一个用于教育目的的作弊(目前在 Windows 上)。到目前为止,我的错误是ReadProcessMemory
始终读取 0。
LPCVOID addr = (LPCVOID *) 0x1228A93C; // TO-DO: c++ casts
int dest = 0;
SIZE_T read = 0;
bool error = ReadProcessMemory(process, addr, &dest, sizeof(int), &read);
if (!error) {
printf("I read %llu w/ %u at %p\r\n", read, dest, addr);
} else {
printf("This isn't working: %p / %llu\r\n", addr, read);
std::cerr << "err: " << std::to_string(::GetLastError()) << std::endl;
return (1);
}
在那里,我尝试读取游戏中的金额。通过使用作弊引擎,我得到了每次你使用你的钱时都会改变的价值,这0x1228A93C
在上面的代码片段中。如果我在作弊引擎中更改此地址指向的值,游戏中的钱也会更改,所以我猜这是正确的地址。
尽管如此,当我运行这个片段时,我得到了这个输出:
I read 0 w/ 0 at 0x1228a93c
这意味着它不读取。
注意:还有更多代码,在我的程序中,在这个上面,但这基本上是找到游戏窗口,创建游戏快照并找到 exe 模块。
解决方案
这可能是你想要的:
LPCVOID addr = (LPCVOID *) 0x1228A93C; // TO-DO: c++ casts
int dest = 0;
SIZE_T read = 0;
if (ReadProcessMemory(process, addr, &dest, sizeof(int), &read))
{
printf("I read %llu w/ %u at %p\r\n", read, dest, addr);
} else {
auto lasterror = ::GetLastError(); // first thing to do: call GetLastError
printf("This isn't working: %p / %llu\r\n", addr, read);
std::cerr << "err: " << lasterror << std::endl; // std::to_string is useless here
}
如果出现错误,首先要做的是打电话GetLastError()
,因为你不知道是否cout
会打电话SetLastError()
。
推荐阅读
- c# - 如何与列表中的重音字母进行交互
? - ios - ios 13.4 中的 admob 可能会出现崩溃
- c++ - 修复 C++ 项目中未找到标识符的错误
- sqlite - 如何在 .Net Core 中将内存流或字节数组转换为 SqlLite DB?
- javascript - Angular SSR - ReferenceError 未定义
- java - 使用 google_mobile_sdk 在 Native Ad Flutter 中出现问题
- java - 有没有办法从 SSE Spring userwise Java 发出事件?
- javascript - 高山模式无法从隐藏的移动菜单中打开
- amazon-web-services - 在 Terraform aws_ecs_task_definition 我如何在卷部分定义绑定挂载
- matplotlib - 0 和 255 都为“灰色”彩色地图提供黑色图像,这是为什么呢?