(PS)かまいたちの夜•特別篇 汉化笔记 六

6.           脚本文件分析

下面开始具体分析脚本文件,这里又要用到agemo_debugger了。

 

       CD-ROM访问断点,可以看到程序将Sce.pac中的一段载入到800C89B8,一开始是读取sce.pac中的1f段。

然后下内存访问断点,范围大约是800C89B8 - 800D07C0

根据第2节的分析也可知1f段也分成了若干段,这里读取的是第400 91。(注意,段号是基0的)

 

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

 

00000000   74 00 7F 00 87 00 8D 00  91 00 AE 00 C1 00 D4 00   t..‡..‘.®.Á.Ô.

00000010   E7 00 FA 00 0D 01 10 01  2A 01 2A 01 2A 01 2A 01   ç.ú.....*.*.*.*.

00000020   2A 01 2A 01 2A 01 2A 01  2A 01 2A 01 2A 01 2A 01   *.*.*.*.*.*.*.*.

00000030   2A 01 2A 01 2A 01 2A 01  2A 01 2A 01 2A 01 2A 01   *.*.*.*.*.*.*.*.

00000040   2A 01 2A 01 2A 01 2A 01  2A 01 2A 01 2A 01 2A 01   *.*.*.*.*.*.*.*.

00000050   2A 01 2A 01 2A 01 2A 01  2A 01 2A 01 2A 01 2A 01   *.*.*.*.*.*.*.*.

00000060   2A 01 2A 01 2A 01 2A 01  2A 01 2A 01 2A 01 2A 01   *.*.*.*.*.*.*.*.

00000070   2A 01 2A 01 41 03 00 41  01 00 1D 69 01 1C 79 1D   *.*.A..A...i..y.

00000080   66 1D 67 3E 01 78 69 41  03 00 41 01 00 1D 69 3F   f.g>.xiA..A...i?

00000090   00 1D 00 40 00 01 22 79  1D 68 40 01 01 1E 79 40   ...@.."y.h@...y@

000000A0   01 02 1F 79 40 01 03 20  79 40 01 04 21 79 4E 02   ...y@.. y@..!yN.

000000B0   E8 80 1D 69 1D 00 40 00  01 22 79 41 01 01 01 1B   è€.i..@.."yA....

000000C0   79 4E 02 F6 80 1D 69 1D  00 40 00 01 22 79 41 01   yN.ö€.i..@.."yA.

000000D0   02 01 1B 79 4E 02 00 81  1D 69 1D 00 40 00 01 22   ...yN...i..@.."

000000E0   79 41 01 03 01 1B 79 4E  02 0C 81 1D 69 1D 00 40   yA....yN...i..@

000000F0   00 01 22 79 41 01 04 01  1B 79 4E 02 10 81 1D 69   .."yA....yN...i

00000100   1D 00 40 00 01 22 79 41  01 00 01 1B 79 01 AC 61   ..@.."yA....y.¬a

00000110   1D 07 00 70 67 00 41 03  00 44 40 03 01 1A 79 1D   ...pg.A..D@...y.

00000120   66 1D 67 3E 53 01 00 01  78 69 00 00 00 00 00 00   f.g>S...xi......

 

    下内存断点有一个方便的地方就是可以观察跳转,比如说现在正在访问00 91,之后顺序访问了00 92一直到00 97,之后突然访问了01 0D,那么就知道出现了一个跳转指令。

    对于跳转指令很适合下内存访问断点并且进行asm log,基本中间没有废代码。如果是其他指令,尤其是会出现中断的指令,比如会读取光盘,显示图片,等待输入之类的,生成的asm log会很大。

    重新读档后,再下内存访问断点,点上asm log,分析可知:

 

指令应该有0-10010165)种,有两套函数来进行处理,

第一套在8006A580

第二套在8006A3EC

他们是连续的。

 

脚本处理程序首先读取1byte,然后执行第一套函数,估计是有效性检查。然后再执行第二套函数,这才是真正的执行。

01的含义应该是跳转,之后跟2bytes

79 22 指明跳转的大段号和小段号。算法如下:(注:这个应该是优化过的除法,实际是除以3E8agemo_homepage中有文章提到过这一点)

7922 * 0x10624DD3,取高位到a3

a0 = a3 / 0x40a3 >> 6    a0就是大段号 (这里是1F

v1 = 7922 –a0 * 3E8         v1就是小段号 (这里是A

 

这个脚本略微复杂了一些,因为每一条指令并没有一个参数指明指令长度,所以只能去看每一个函数,确定各个指令的参数占用多少字节,意义如何。

 

详细参考FuckSce的代码和idb文件,查找ReadScript函数。

 

之后跳转到了其他段,发现有压缩的情况,所以开始处理解压。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值