C ++返回float

时间:2014-03-30 00:10:41

标签: c++ memory

我为游戏创建了一个API。

我的问题:我想从内存中读取一个浮点值。

结果(作弊引擎)100

API的结果:0.00000

extern "C" __declspec(dllexport) float samp_health()
{
    hwnd = FindWindow(NULL, L"MyGame");
    GetWindowThreadProcessId(hwnd, &pid);
    HANDLE phandle = OpenProcess(PROCESS_VM_READ, false, pid);
    float value = 0;
    ReadProcessMemory(phandle, (float*)(PlayerPointer + HealthOffset), &value, 4, NULL);
    CloseHandle(phandle);
    return value;
}

有什么问题?

1 个答案:

答案 0 :(得分:3)

有了这一行,

HANDLE phandle = OpenProcess(PROCESS_VM_READ, false, pid);

你需要检查失败。

在接下来的一行中,

ReadProcessMemory(phandle, (float*)(PlayerPointer + HealthOffset), &value, 4, NULL);

假设ReadProcessMemory的工作方式与参数大致相同,PlayerPointer必须是phandle标识的进程中的有效指针,如果HealthOffset是以字节为单位的偏移量,则PlayerPointer需要是指向byte的指针。

很可能不是。


读取进程内存通常不是进程间通信的好方法。

以下是一些替代方案:

  • 不要进行流程沟通,做线程或其他任何事情。

  • 使用Windows COM技术。

  • 使用Windows邮件地址。

  • 使用Windows窗口消息(例如WM_DATA)。

  • 使用套接字。

  • 使用文件。

  • 使用烟斗。

几乎所有东西,都不是直接访问进程内存。


总结一下,主要问题是使用过低的抽象级别。