[转]关于NDS平台汉化和烧录卡研发技术的一个促进意见
作者: 实验小白鼠 日期: 2010-05-05 10:11
去年兴趣所致,加上帮个朋友的忙,对NDS发售游戏软件结构进行了适度的考察,搁下很久印象不是太清楚了,趁现在不太困写出来分享一下,我是没时间在这上 面多做什么工作了,如果有相关人员能继续探索出一片新的景色最好不过。
发售的游戏,自然使用的是老任官方的开发包,而这套开发包其实在GOOGLE上搜索NitroSDK,是人人都可以搞到手的。结合文档了解软件内存分布结 构结合调试得知,一般情况下,发售游戏会调用void *OS_AllocFromArenaHi(OSArenaId id, u32 size, u32 align) API划出每个内存区间,而ARM9的主内存区(4M机器模式下主内存为1M大小)OSArenaId 为0,也是这样自底向上生成(将来用做堆的空间),底部地址不固定,而顶部地址固定为0x23e0000,这样的话,只要能够在发售游戏中定位到 OS_AllocFromArenaHi(0,0x???,0x10)这个调用,并缩小0x???的尺寸,就能在这个游戏手上抢出一片不被使用的内存,而 自行使用。
对于汉化者来说,可以通过这种方法获得一片自己的内存空间,实验表明虽然NDS内存紧张只有4M,但是基本每个游戏失去固定50K内存不成问题,可以正常 运行,这50K内存存放数据的话是个选择,对于一些资深的破解员以及烧录卡技术人员来说,是一个诱人的机会,因为主内存区的顶部地址是固定的,而抢出多少 内存又是可以自行决定的,那就意味着对任意发售游戏都可在同一个固定地址获得一片内存,既然是固定地址获得内存,就可以设置GCC的编译选项编写一些程序 将扩展指令BOOT到这上面,自适应任意发售游戏,而可以使用GCC并且能定位到API的地址的话,这部分扩展指令更是可以使用C语言来编码,降低成本提 高效率。
若仔细研究SDK文档并展开联想,可以实现一些激动人心的功能,可能性有很多。
最后,如何定位SDK中的API在发售游戏中的地址呢,一是水晶同学的CT2软件似乎提供了支持,具体如何使用我并不清楚,二是也可以自行使用反汇编软件 IDA比对开发包lib目录里的指令块和发售游戏ARM9.BIN中的指令块,这只是个文本处理工作,没啥技术难度。
2010-05-05 10:12:04
订阅
上一篇
返回
下一篇
标签:


openCanvas 4.5.20 plus 汉化修正版与字典同时发布 (2010-08-24 13:25)
Wood R4 内核 v1.1.2 (2010-08-18 18:04)
openCanvas 4.5.20 plus 汉化版发布 (2010-08-07 23:51)
非广告也:想免费拿SC DSTWO吗? (2010-07-30 18:55)
最近有点烦 (2010-07-10 00:49)
被迫拉下水…… (2010-07-06 23:07)
vPokeName 口袋DS系列姓名修改器 v1.1.0 发布了 (2010-07-03 10:48)
Wood R4 内核更新 v1.1.0 (2010-07-02 12:13)
NDS 5015 - Ghost Trick 字库小研究 (2010-06-27 02:16)