CheatMaker 论坛

首页 » 修改器版块 » CheatMaker综合讨论 » PPSSPP模拟器基址相关疑问求指点!
zsyf - 2013/6/26 23:11:30
  虽然银河大大放出了PPSSPP模拟器0.76与0.80官方正式版的两个基址,但自己也曾手动寻找过相关版本的基址,却没有什么结果,为了能“知其所以然”,因此有几点疑问需要银河大大或其他高手的指点。

  首先想请银河大在闲暇时间能详细说明一下PPSSPP 0.80官方正式版的基址寻找过程。从两次给出的基址来看,似乎应该是很简单的一级指针,可自己在尝试寻找基址时,却怎么也找不到。除了其中包含另一个不解之迷(后来才从群里了解到与此有关的一个专有名词:内存镜像)——每次用CE搜索临时地址时,最后都会有两个数值一样的地址,而且两个地址都能正确修改游戏中的数值。不过,只有其中一个比较靠后的地址能用CE的“找出是什么访问/改写了该地址”的功能找到相应的偏移,另一个则毫无反应。可即便找到相应的偏移了,也无法搜索到基址。

  此外,早在0.76版时就有网友曾经说过,即便添加了基址也无法用CM找到数据,本人分别用CM与CE经过多次测试后发现有时能找到,而有时却找不到。这似乎与PPSSPP的偏移太大以及偏移地址不是固定有关。再加上0.76版的基址没有添加修正数据,所以导致基址无法指向正确的偏移地址。0.80版添加了修正数据8800000后则好多了,至少本人用之前测试0.76版的两个游戏《怪物猎人2G》与《王国之心》,经过多次测试(每个游戏>20次)后发现都能正确搜索所需要的数据。

  可惜本人对OD的使用技巧掌握的还不熟练,因此无法用OD来跟出基址。所以,对银河大是如何找到PPSSPP两个版本的基址非常感兴趣,尤其是如何得出需要修正8800000这样的数据。现在PPSSPP官方正式版已更新到0.80,希望银河大能就此版本详细介绍一个寻找该基址的过程与心得,必竟“授人以鱼,不如授人以渔”嘛。

  由于时间的关系,测试的次数还不够多,也不知这次的基址是否百分百稳定。这不,在测试过程中,分别用CE与CM搜索同一个游戏的数值时,居然出现了同一个基址所指向的临时地址不同,但都能正确修改游戏中的数值的奇怪情况,其中CE的指针是基址加上经过计算的偏移数量。不知是计算有有误还是其它什么原因,如果有哪位高手对这方面有所了解的话,还请多多指点。

  最后则是关于“内存镜像”的疑问,银河大只是在群里简单说了几句,而本人还是第一次接触到这样的情况,对此问题背后的原理也非常感兴趣,如果有时间的话也希望银河大等高手们能就此问题深入地讲解一下,这里先行拜谢了。
zsyf - 2013/6/26 23:30:13
帖子发出去才想起还有一个疑问有待解决,对模拟器和CM比较熟悉的都知道,当CM的基址添加正确后,CM所指向的临时地址与金手指的址是一定规律的,比如《王国之心》汉化版的金钱最大地金手指:
_L  0x2172CBC8 0x00016025,PPSSPP 0.80版添加了基址与修正数据后,在本人的测试过程中,大多数时候CM所指向的临时地址(其实就是偏移)为172CBC8,仅比金手指地址少最前面一位2;再比如《怪物猎人2G》汉化版的金钱最大金手指:_L 0x211FF090 0x000F423F,CM的临时地址则是:011FF090,同样也是少了最前的2而已,可是在测试期间也出现过其它与金手指毫无关联的地址。

因此,问题就来了,在PSP实机上也会出现这样的情况吗?换句话说,实机上的金手指程序是如何保证地址的唯一与正确性的呢?换到PC上,如果想使用CE来得到与CM或实机上的相同效果又该怎么做呢?
银河漫步 - 2013/6/27 7:43:59
我只能回答你第二个问题
一般可以兼容psp的金手指地址,就是那个去掉2的关系
至于有些毫无关联,鉴于本人其实psp在家里吃灰多年,没有深究
你可以举例来分析下

上述什么内存镜像,原理不清楚,Dolphin也有这个镜像内存
怎么找到基地址的你自己也试过了后面那个地址
至于为什么是8800000
只是因为psp的ram数据段的一个内存偏移
zsyf - 2013/6/27 13:24:40
想不到帖子发出的第二天,PPSSPP就更新到0.81正式版了。其实主帖最想知道的是搜索基址的方法,这样新版PPSSPP出来的时候就可以自行查找了。

另外,这里再补充一下昨天测试游戏时发现的另一个问题,不知CM是否能解决。此问题是测试《梦幻之星2》时,为了方便想用CM锁定PP值(相当于其它游戏中的魔法值),哪知此游戏设计的十分奇怪,每经过一段地图后,之前用CM找到的PP值地址就变动了,不能用了,必需重新搜索新地址、再次锁定才行。

像这种偏移不断变化的地址,即便CM添加了正确的基址和修正数据,也只能保证能正确搜索到数值,但却无法自动更新偏移变动后的地址,不知CM是否能解决这个问题。虽然用CE的汇编脚本可以一定程度上解决此问题,但由于PPSSPP的汇编代码地址也是不断变化的(变动规律不明),所以也无法完美解决。

其实以上问题都是在群里看到银河大目前好像对PPSSPP比较感兴趣,所以才提出以供讨论。作为一个从0.75版就开始关注PPSSPP发展的模拟器爱好者,是非常乐于见到有越来越多的人关注并开始研究PPSSPP模拟器的。
银河漫步 - 2013/6/27 13:37:21
我目前对ppsspp兴趣不大

我在测试梦战2的汉化版
zsyf - 2013/6/27 13:53:54
发错了,编辑掉吧!!!!
银河漫步 - 2013/6/27 16:55:19
内存老变的问题
nds也有
动态内存分配的问题
需要在模拟器内找指针
天枫十一郎 - 2013/6/27 20:52:34
所有数据都会有一个基本地址的.但也不排除重新分配地址的可能.
但终归会有一个指针似的关联东东.否则你界面上看到的数据也需要读取.怎么来的?程序员也要读取那个数据显示在游戏界面上.他用什么方法你就能用什么方法.
对于不是常态的数据结构.你需要花更多的时间去找关系.就像人为的加密数据一样.
zsyf - 2013/6/28 11:10:43
看了各位大神的说明后,反而更糊涂了,看来“修为”还不够呀。
1
查看完整版本: PPSSPP模拟器基址相关疑问求指点!