首页 > 解决方案 > 没有使用指针和偏移量获得正确的地址

问题描述

我是 C++ 的初学者,我试图在 CS:GO 中获得玩家的健康值,但我遇到了一些问题。使用 CheatEngine 我发现 playerbase 是“client_panorama.dll”+ 0xCBD6B4,健康值的偏移量是 0x100。效果很好,但是我无法将其转换为 c++。我正在使用 dll 注入,但在我注入的 DLL 中,我无法获得与 CheatEngine 中相同的地址。行政长官图片:https ://i.imgur.com/TlUwZV3.jpg

我在几个论坛上寻找解决方案,但我找不到一个。到目前为止,这是我的代码尝试:

DWORD dwClientBase = (DWORD)GetModuleHandleA((LPCSTR)"client_panorama.dll");
DWORD dwClientBaseOffset = 0xCBD6B4;
DWORD dwOffset = 0x100;

DWORD dwplayerBase = *(DWORD *)(dwClientBase + dwClientBaseOffset);

但是通过这种尝试,我无法获得与 Cheatengine 中相同的 PlayerBase 地址。

背景:我不是在尝试破解,而是要学习如何从真实游戏中提取信息。将来我想尝试为真正的游戏编写 AI,因此如果你有更多的信息而不仅仅是游戏的视觉输出,这将非常有帮助。

谢谢你的帮助,瓦修斯

标签: c++pointersdllcheat-engine

解决方案


你的代码是正确的。如果您的代码正确执行,则 dwplayerBase 将等于播放器对象的地址。

如果要获取健康地址,则需要添加 dwOffset。我相信你的困惑是因为你期望得到健康地址。要得到它,只需添加以下行:

DWORD healthAddr = dwplayerBase + dwOffset;

推荐阅读