ReadProcessMemory 始终读取 0
ReadProcessMemory always reads 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);
}
在那里,我尝试读取游戏中的金钱数额。通过使用 Cheat Engine,我得到的值会在您每次使用您的钱时发生变化,即上面代码片段中的 0x1228A93C
。如果我在作弊引擎中改变这个地址指向的值,游戏中的钱也会改变所以我猜这是正确的地址。
尽管如此,当我 运行 这个片段时,我得到这个输出:
I read 0 w/ 0 at 0x1228a93c
这意味着它不读。
注:代码较多,在我的程序中,在这个上面,但这基本上是寻找游戏window,创建游戏的快照并找到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()
。
我正在为教育目的(目前在 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);
}
在那里,我尝试读取游戏中的金钱数额。通过使用 Cheat Engine,我得到的值会在您每次使用您的钱时发生变化,即上面代码片段中的 0x1228A93C
。如果我在作弊引擎中改变这个地址指向的值,游戏中的钱也会改变所以我猜这是正确的地址。
尽管如此,当我 运行 这个片段时,我得到这个输出:
I read 0 w/ 0 at 0x1228a93c
这意味着它不读。
注:代码较多,在我的程序中,在这个上面,但这基本上是寻找游戏window,创建游戏的快照并找到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()
。