逆向:程序研究/AT1/资源文件IO及虚拟文件系统

来自歌颂之丘
Xiyan讨论 | 贡献2024年3月17日 (日) 13:39的版本 (新建页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索

资源文件和资源虚拟文件系统(RPK)的相关例程。以下地址全部为日版原始镜像地址。其他程序的地址推荐使用程序相似度分析获取。

host指主机文件系统,即host:,在PCSX2上需配置开启,在PS2上可通过特殊的软件(如DECI2)开启,并连接到远端文件系统。挂载到根host:或host0:。

资源VFS初始化

存在两个同职能函数。102190和1021D0。还需进一步检查。1021D0进行更少的初始化,并且设置初始化类型(-0x7ED0($gp))为0;102190则设置为1。1表示使用ADXFS。

其中102190还会预载afs。

资源加载

资源加载有多个方式。不同的系统采用分别的函数加载。文件类型的判断依赖于文件后缀。例如,.lzr压缩过的意味着文件后缀为.lzr,会尝试lzr解压缩。

  • FP加载:文件包加载。载入文件包后,文件包内尝试lzr压缩过的及原始文件。
  • RPK加载(102298):尝试lzr压缩过的,gz压缩过的及原始文件打开。

RPK资源大小获取

地址:102F68

如果初始化类型为1,则从host打开文件、获取文件大小,否则从光碟(?cvFs)获取文件大小。

RPK加载

有一个统一的包装函数10257C。由该函数决定调用以下三者之一:

  • 光碟上的RPK(102A1C)
  • Host上的RPK(102C0C)
  • Host文件系统(102DB0)

※虽然说是由函数决定,但是该决定发生在编译时。即GUST通过修改10257C调用的函数来决定使用哪一种加载策略。

※如果初始化类型(-0x7ED0($gp))设为1,则以上三者皆使用同一种逻辑读取。

修改思路

直接修改102F68(get_resource_size)及102A1C(load_Disc_Rpk_Resource),无视初始化类型(-0x7ED0($gp)),优先从host读取文件。失败时回滚。

或者修改包装函数10257C,但需要注意维护102F68。