[转]关于NDS平台汉化和烧录卡研发技术的一个促进意见

原文地址:http://bbs.emu-zone.org/newbbs/viewthread.php?tid=663714
原文作者: goyoups2

去年兴趣所致,加上帮个朋友的忙,对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

引用通告地址: 点击获取引用地址
标签: 汉化 DS
评论: 2 | 引用: 0 | 阅读: 501
  • 1 
enler [ 2010-05-29 19:09 | 回复 | 编辑/删除 ]
很受启发呢,已经运用到实践中了,呵呵
Smile [ 2010-05-09 08:03 | 回复 | 编辑/删除 ]
很好,很强大,可以研究一下。
  • 1 
发表评论
昵 称(*): 密 码:
网 址: 邮 箱:
验证码(*): 验证码图片 选 项:
内 容(*):