游戏内存变量值修改原理及外G程序内存修改不起作用原因
游戏内存变量值修改原理,及外部挂载程序对游戏内存修改不起作用的原因分析
有时候我们会发现内存地址正确,读取函数正常,写入函数正常,编译正常,但是就是得不到正确的变量值,其实并不是因为程序代码编写出现逻辑问题,而是和程序的值获取方式有关,
.版本 2
置随机数种子 ()
b = 取随机数 (0, 99)
' 静态变量,在整个程序期间,静态变量中的值会一直保留,地址也会不变(地址属性和全局变量一样),直到程序结束,或写入新的值,设置随机数即便内存中可以修改,游戏界面显示效果的数值或内部运行数值也不会发生变化成想要修改的值。

如果变量值是由外部随机写入,那么,当我们对变量进行内存修改时,其实已经成功修改了该变量的值,但是随后,该值是随机写入的,不基于原有值的基础上进行运算,所以写入的值很快就会给新刷入的随机值取代,所以在窗口界面就显示不出效果。

所以,外部修改内存值的条件便是,
其一,要修改的内存值应该是一个全局变量或静态局部变量,判定方式就是看该值在游戏中是否可以长时间的稳定存在,
其二,该值的变化是基于自身原有值的基础上进行增减运算变化,比如i = i - 1或 a=i i=a*3+6(本质还是i自身值变化后再写回自身)也可以理解为某种条件触发,导致自身值发生变化再返回自身。

当再次触发时,便能由修改后的值参与计算,返回给自身,从而修改游戏内存值。
完全随机的刷新的内存数值,本身便无修改的意义,比如每次开局随机刷新出来的方块或野怪位置、数量,便是借由随机函数种子产生,
修改之后,下次内存值又会被随机值刷新,其不需要在原值基础上进行变化,内存值也不需要一直存在于整个程序运行期间。
这样的修改值变是毫无意义的。
当然,可以用反汇编的方法NOP掉随机函数,再改写内存值,这又是后话了。