起因是这样的:
前段时间我知道了用CE,当时对每次重启游戏甚至电脑基址都不会变觉得很奇怪
,因为我以为基址是实实在在的物理内存地址,怎么可能不变呢
(假设当关闭程序重启之前有其它程序占据了那个程序的基址不就不可能不变了吗?)。。
后来自己查了下,好像有一点懂就是基址不是物理地址而是虚拟地址(不知道是不是?)?
但还是有疑问,既然是虚拟地址CE是怎么调用的。。
我自己自圆其说(就是CE向操作系统发送请求调用基址0x********,
操作系统知道CE请求的是虚拟地址,
于是通过对应表之类的东西返回CE基址的物理地址于是CE通过基址对应的物理地址+偏移量更改数据?),
但是我又觉得有问题,因为两个程序的基址可能一样(比如我开两个同样的程序)
,于是我开了两个相同的模拟器,找到了一个模拟器的基址,对应的数值为2(2格血),
然后用CE打开另一个模拟器,且游戏也是一样的,
这时候(基址->地址)+偏移量的值变成了6(之前的模拟器因为要找基址游戏里的人物血量变成了2,6是满血),
我让后者模拟器去少了一个血,6变成了5,
说明前一个模拟器找的基址和后面开的模拟器是一样的。。
这又不能圆我之前的理解(向操作系统请求基址对应的内存地址,但是基址相同怎么分别是要找哪个?)
以上都是我自己看资料后的猜测,有没有大神能帮我解释一下每个 问号 的问题。