1
mokeyjay 2023-01-23 16:24:25 +08:00
基址了解一下
|
3
wangritian 2023-01-23 16:40:55 +08:00
进程都是从 0 开始的相对地址,实际物理地址是操作系统和硬件一起管理;分配到栈空间的变量相对地址固定,比如全局变量、函数内静态变量,角色属性多半是这种;堆空间虽然是动态分配,也可以找到某个定值的地址再通过固定的偏移找到目标变量吧
|
6
kokutou 2023-01-23 16:48:45 +08:00 via Android
基址 偏移 指针 特征
|
8
mingl0280 2023-01-23 17:26:19 +08:00 via Android 2
风灵月影是人家找好了地址特征码的,当然不需要扫了,CE 的 Cheat Table 也是一个原理。
|
9
crab 2023-01-23 17:32:54 +08:00 1
相对地址,比如获取模块地址再加偏移。再智能点直接动态特征码搜索匹配。
|
12
Mutoo 2023-01-24 05:57:56 +08:00
在游戏开发过程中,从堆中申请变量是一种非常低效的过程,所以大部分游戏在性能优化的过程中都会把变量转移到栈上,于是地址就固定下来了。
|
13
pennai OP @Mutoo “因为变量分配在栈上所以变量的地址会固定“ 这个说法感觉和我的认知有点出入?变量即使分配在栈上,从汇编的角度,一个函数调用( procedure )结束之后,栈指针寄存器就移动到了低位(类似于 leetcode 使用双指针实现栈,弹栈的过程);下一个 procedure 调用的时候栈指针寄存器移动到高位,将新内容覆盖掉旧内容,原来的变量已经不存在了,怎么能说是固定地址呢?
还是说其实你想表达的概念是静态存储区与堆上分配变量的区别?类似 C 系语言的全局变量在静态存储区地址不变,malloc (或说 new )、局部变量在堆或栈上分配 |
14
Mutoo 2023-01-24 06:59:19 +08:00 1
@pennai 应该是在静态存储区的意思。另外有的游戏还会自己实现内存分配,初始化会预留一个内存区域来自己分配对象空间。然后各系统依次启动。这样一来,这个初始地址相对容易被找到,之后的地址也就相对固定了。例如玩家系统一般在固定位置被分配,之后也为会被销毁。
|
16
ysc3839 2023-01-24 12:09:50 +08:00 via Android
“似乎不需要通过数值变化,就能知道金钱变量存储在哪个地址”
是的,因为那是一开始找的过程,已经找到了当然不需要了。 “某个变量固定在某个相对地址不太可能” 否的,一般没谁会故意把相对偏移量都给打乱,就算打乱了,仍然可以按照它打乱的规则去读取。 |
18
DeltaC 2023-01-24 20:34:01 +08:00
|