c++ - 没有使用指针和偏移量获得正确的地址
问题描述
我是 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,因此如果你有更多的信息而不仅仅是游戏的视觉输出,这将非常有帮助。
谢谢你的帮助,瓦修斯
解决方案
你的代码是正确的。如果您的代码正确执行,则 dwplayerBase 将等于播放器对象的地址。
如果要获取健康地址,则需要添加 dwOffset。我相信你的困惑是因为你期望得到健康地址。要得到它,只需添加以下行:
DWORD healthAddr = dwplayerBase + dwOffset;
推荐阅读
- php - 从命令行窗口运行 PHP
- java - 如果被进程锁定,如何在Java中删除文件?
- php - 如何在 laravel 中使用 trait 作为路由控制器方法?
- asp.net-core - 什么可能导致 `UserManager` 返回错误的用户?
- python - 如何使用 Sqlite 将逗号分隔的值拆分为多行
- javascript - Reveal.js:如何在没有淡出效果的两个垂直部分之间创建自定义过渡(未预定义)?
- wordpress - Wordpress - 从侧边栏小部件中排除页面?
- c - 为什么 PTRACE_GETREGS 在 Windows 上的 MoMo(Android 模拟器)播放器中的 arm so 文件中不起作用?
- sql-server - 为什么 SQL Server 存储过程将加密数据选择到变量中失败
- ios - 如何从 Swift 4 中的模数和指数生成 RSA 公钥?