DS文件格式分析第二弹——fnt.bin和fat.bin篇
原作者:kohos
继续为大家奉上NDS文件格式分析第二弹——fnt.bin和fat.bin篇
这两个文件是配合使用的,缺一不可,原因见下:
fnt.bin里面储存了所有文件/文件夹的名称。
fat.bin储存了所有文件在ROM的偏移地址(每个文件一个开始地址一个结束地址共8Byte)
这次用的例子是1336号ROM的FFCC啦。
首先我们先看看ROM里的fnt.bin文件(图1):
注:以下地址都是文件中的偏移地址,和图中在ROM里的地址不同。
00000000 28 00 00 00 28 00 05 00 5E 00 00 00 2A 00 00 F0
//0×00000000~0×00000003是文件/文件夹名称列表的开始地址(0×00000028),0×00000008~0×0000000C是第1个文件夹所含有文件的列表的开始地址(0×0000005E)
00000010 6B 00 00 00 2B 00 00 F0 7F 00 00 00 2D 00 00 F0
//0×00000010~0×00000013是第2个文件夹所含有文件的列表的开始地址(0×0000005E),0×00000018~0×0000001C是第3个文件夹所含有文件的列表的开始地址(0×0000005E)
00000020 C8 00 00 00 33 00 00 F0 0B 63 6F 6F 6C 72 65 73
//0×00000020~0×00000023是第4个文件夹所含有文件的列表的开始地址(0×0000005E),FFCC就4个文件夹。
//从0×00000028开始就是文件/文件夹名称列表了:
00000020 c8 00 00 00 33 00 00 f0 0b 63 6f 6f 6c 72 65 73 coolres
00000030 2e 72 73 62 0b 69 74 63 6d 76 78 2e 73 62 69 6e .rsb.itcmvx.sbin
00000040 83 64 77 63 01 f0 84 69 63 6f 6e 02 f0 85 6d 6f .dwc.?icon.?mo
00000050 76 69 65 03 f0 85 73 6f 75 6e 64 04 f0 00 0b 75 vie.?sound.?.u
00000060 74 69 6c 69 74 79 2e 62 69 6e 00 09 69 63 6f 6e tility.bin..icon
00000070 2e 63 68 61 72 08 69 63 6f 6e 2e 70 6c 74 00 0b .char.icon.plt..
00000080 6d 6f 76 69 65 30 30 31 2e 76 78 0b 6d 6f 76 69 movie001.vx.movi
00000090 65 30 30 32 2e 76 78 0b 6d 6f 76 69 65 30 30 33 e002.vx.movie003
000000a0 2e 76 78 0b 6d 6f 76 69 65 30 30 34 2e 76 78 0b .vx.movie004.vx.
000000b0 6d 6f 76 69 65 30 30 35 2e 76 78 0b 6d 6f 76 69 movie005.vx.movi
000000c0 65 30 30 36 2e 76 78 00 0f 6d 75 73 69 63 5f 64 e006.vx..music_d
000000d0 61 74 61 2e 73 64 61 74 0c 73 65 5f 64 61 74 61 ata.sdat.se_data
000000e0 2e 73 64 61 74 00 .sdat.
//从0×00000028开始,先是0BH,表示这个文件名称的长度,然后0BH个字节就是名字了,再接下来是下一个文件名称的长度……
//从0×00000040开始,是83H,表示这是个文件夹(文件与文件夹就这样区分),文件夹名称长度为3,接下来是名称,后面还会有XX 0F,表示文件夹的编号。
//每个数据段之间会有00H分隔
fnt.bin文件大概就这样。
然后是fat.bin文件:(图2)
fat.bin文件很好分析。把它每4个字节拆开来看,再配成一对,前面的是文件的开始地址,后面的是文件的结束地址。(图中第一个文件是从0×00103000到0×00103100)
这里要注意的是:在各种系统文件之间也可能夹有文件,这些文件就是所谓的overlay文件,他们的地址也分布在fat.bin里,区分他们很容易,看他们的地址是不是小于排在最后的系统文件的地址就可以了。
FFCC排在最后的系统文件是banner.bin(一般都是它)的地址是0×001EC000
图中从0×00000140开始才是真正的文件(0×001ECA00),他就对应了coolres.bin文件了
yeyezai
现在就差Banner.bin、arm9.bin和Overlay9_*.bin了
arm7.bin无视……
Overlay9文件中还是有需要汉化的地方
但一般情况下,都是以另一种方式压缩了,所以汉化就难了
常见例子:炸 弹人世界系列
arm9.bin中也有需要汉化的,有可能被压缩,有可能没被压缩
常见需要汉化的数据是文本
crystal
overlay:
覆盖文件/覆盖装入程序模块
就是复用同一地址段的多个程序模块
用来节省内存
如有两个 overlayfile
你会发现他的加载地址都是一样的(如02001234)
这样使用他
将overlayfile1加载入02001234
然后执行02001234
如果要使用overlayfile2时
将overlayfile2加载到02001234
然后运行
同一个内存区域只能被一个overlayfile暂用
FNT是文件目录表的意思
FAT是文件分配表的意思
ARM9是可编程的
ARM7官方开发是不能修改的,提供几个ARM7模板。

