首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >游戏里的血量,在内存里并不是那个数字

游戏里的血量,在内存里并不是那个数字

原创
作者头像
PC电脑医生
发布于 2026-09-22 15:09:14
发布于 2026-09-22 15:09:14
1340
举报

用金山游侠V5.0最新版这类内存修改工具时,最常遇到的一个情况是:

游戏里金币显示 500,你搜 500,出来几百个地址。

用掉一些,变成 450,再搜 450。

剩下几个。

再变几次,全没了。

或者另一个场景:血量明明写着 100,搜 100 搜不到任何东西。

为什么?

答案在于:屏幕上显示的数字,和内存里存的数字,往往不是一回事。

先看整数和浮点数的区别

假设游戏里血量是 100。

如果内存里存的是整数 100,那它的二进制是这样的:

代码语言:bash
复制
00000000 00000000 00000000 01100100

占 4 个字节,最后一个字节是 100 的二进制形式。

你用工具按"4 字节整数"去搜,能精确定位到它。

但很多游戏存的不是整数。

它存的是小数。

为什么?

因为游戏里的数值需要参与运算。

比如"每秒恢复 0.5 点生命"、"移动速度是 2.25"、"伤害浮动范围是 0.9 到 1.1 倍"。

这些都需要小数。

而小数的存储方式,和整数完全不同。

浮点数不是"存小数点的数字"

这里要说到一个标准,叫 IEEE 754。

它是目前几乎所有计算机表示小数的通用规范。

它的做法,不是"把 100.0 存成 100 加个标记"。

而是把一个数拆成三段。

以单精度浮点数(4 字节)为例:

  • 符号位(占用位数:1 位;作用:正数还是负数)
  • 指数位(占用位数:8 位;作用:数量级,也就是小数点该往哪边移)
  • 尾数位(占用位数:23 位;作用:有效数字部分)

换句话说,它存的不是"这个数是多少",而是用科学计数法表示这个数时,各部分是几。

拿 100.0 举例。

它会先被转成二进制科学计数法的形式,再分别把符号、指数、尾数填进对应的位。

最终在内存里是这么四个字节。把它和整数版本的字节放一起对比,差别一眼就能看出来:

  • 整数 100:64 00 00 00
  • 浮点数 100.0:00 00 C8 42

注意看——浮点数那四个字节里,没有任何一个字节的值是 100。

如果你按"4 字节整数"去搜 100,工具会去找 64 00 00 00 这样的字节序列。

而实际存的是 00 00 C8 42。

两者对不上,当然搜不到。

换一种类型试试

解决方式很简单:在搜索时把数据类型改成"浮点数"。

同一个 100.0,用浮点类型去搜,立刻就命中了。

这也是很多人第一次用这类工具时踩的坑——默认按整数搜,找不到就以为工具不好使。

实际上工具没问题,是搜索的类型选错了。

顺带说一句,如果游戏用的是双精度(8 字节),那还得换成"双浮点数"再试一次。

同样的数值,在不同类型下的字节序列完全不同。

为什么数值会"跳"

第二类情况更让人困惑。

搜到了地址,也确实对得上。

但你会发现:这个数值在不停地小幅波动。

或者你改完之后,游戏里的数值没变。

原因通常是:内存里存的不是最终值,而是某个中间量。

最常见的一种:经过换算

比如游戏内部把血量存成"当前血量的千分之一",或者"血量占总量的比例"。

显示层再乘回去。

这种情况下,内存里的数值和屏幕上的数值之间差一个系数。

你按屏幕上的数字去搜,自然搜不到。

另一种:加了偏移或异或

有些游戏会对关键数据做一次简单变换。

比如真实值和某个固定数做异或,或者加上一个常量。

这么做的目的不是防住修改——更多是为了避免内存里出现"太整齐"的数据。

因为如果血量的二进制就是 100,那用工具一扫,满屏都是候选。

加个变换之后,内存里的值变成了一个奇怪的大数字,按原值搜就找不到了。

还有:存在多个副本

很多游戏会把同一个数据存好几份——显示用的、逻辑计算用的、网络同步用的。

它们之间可能还有细微差别。

所以你搜到的那几个地址里,可能只有一个真正影响游戏行为,其他的改了没反应。

这也是为什么"搜到一堆地址"是常态,而不止一个。

动态地址的问题

第三类是地址本身在变。

你确认了某个地址是血量,改成 9999,生效了。

关掉游戏重新打开,那个地址上的东西已经不是血量了。

这是现代操作系统的内存保护机制导致的——每次启动,程序在内存里的位置都会重新随机分配。

所以工具通常要找的不是"那个地址",而是"怎么算出那个地址"。

常见做法是找一条访问链:

从一块固定的区域出发,经过若干次偏移,最终到达目标位置。

这个链条是稳定的,因为它是程序自己的数据结构决定的——不管整体怎么随机,内部的相对关系不变。

找这条链的过程比较繁琐:需要先找到"谁在读这个地址",再顺着往上追。

模糊搜索是怎么绕过这些的

上面几种情况,有一个共同的应对手段:不搜具体数值,改搜变化趋势。

金山游侠V5.0最新版这类工具都提供了这个选项,只是名字各不相同。 比如"未知初始值"、"模糊搜索",背后是同一套逻辑。

思路是:我不知道内存里存的是什么,但我知道游戏里它怎么变了。

操作大致是:

第一步,先扫一遍全部内存,把所有位置都记为候选。

第二步,在游戏里让数值变小(比如掉点血)。

第三步,让工具筛选出"刚才变小了"的那些位置。

第四步,再让它变小一次,继续筛。

重复几轮之后,候选就收敛了。

这个方法的妙处在于:它完全不需要知道内存里的编码方式。

不管是整数、浮点、还是加了偏移,只要它随游戏行为同步变化,就能被筛出来。

这也是这类工具里"未知初始值"那个选项的用途。

那什么样的改不了

说了能改的,也得说清楚改不了的。

最关键的一条:数据得在本地。

如果游戏把数值存在服务器上——你本地内存里那个数字,只是服务器发过来的一个副本。

你改了它,画面上的数字会变,但服务器那边不知道。

下一次服务器推送状态时,它就被覆盖回去了。

所以这类工具只对本地计算的游戏有效——也就是数值由你自己的电脑算出来的那种。

这也是为什么它主要用在单机游戏上。

顺带说个和工具本身相关的事

这类工具经常被杀毒软件报毒。

原因不难理解:它要做的事——读取别的进程的内存、往里面写数据——和恶意软件的行为模式是一样的。

杀毒软件判断威胁靠的是行为特征,不是意图。

所以即便它只是改个游戏金币,触发告警也是正常现象。

真要使用的话,从可靠来源获取,并且只在本地单机环境里用。

把它对准联网游戏,不仅技术上不成立,性质也变了。

一句总结

用金山游侠V5.0最新版搜不到那个数值,通常不是工具的问题,是"数字在内存里的样子"和你以为的不一样。

整数和浮点数的存储结构完全不同,同一个 100 在不同的类型下是几组毫无关联的字节。

而游戏还可能对数值做换算或变换,让它彻底认不出来。

真正通用的办法是扔掉具体数值,改看变化趋势——只关心它有没有变小、有没有变大。

这样不管内存里存的是什么形式,都能逐步收敛到那个位置。

安装包地址:

https://www.ijinshan.com/software/jsyx.html?channel=4015

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 先看整数和浮点数的区别
  • 浮点数不是"存小数点的数字"
    • 换一种类型试试
  • 为什么数值会"跳"
    • 最常见的一种:经过换算
    • 另一种:加了偏移或异或
    • 还有:存在多个副本
  • 动态地址的问题
  • 模糊搜索是怎么绕过这些的
  • 那什么样的改不了
  • 顺带说个和工具本身相关的事
  • 一句总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档