《星空のメモリア》脚本简单分析

脚本是编译型的脚本,虽然没加密,但不去调试的话就很难分析。
脚本第一个DWORD是一个偏移,跳转到脚本的那个偏移处的第一个双字是脚本的入口偏移,游戏从那个偏移处开始对脚本进行解释。
下面这段东西就是指令操作的过程。跟vmp那指令解码的过程很像,嗯。
[quote]
0043F890 > 8B86 1C080000 mov eax, dword ptr [esi+81C] ;当前脚本的offset
0043F896 . |8B4E 04 mov ecx, dword ptr [esi+4] ;脚本数据基址
0043F899 . |0FB60C01 movzx ecx, byte ptr [ecx+eax] ;取指令
0043F89D . |0FB6D1 movzx edx, cl
0043F8A0 . |83C0 01 add eax, 1
0043F8A3 . |8986 1C080000 mov dword ptr [esi+81C], eax
0043F8A9 . |8B0495 00BD47>mov eax, dword ptr [edx*4+47BD00] ;取指令的处理过程
0043F8B0 . |8BCE mov ecx, esi
0043F8B2 . |FFD0 call eax ;处理指令
0043F8B4 . |80BE 10080000>cmp byte ptr [esi+810], 0
0043F8BB .^\74 D3 je short 0043F890
[/quote]
目前我就观察到0x01到0x26的各个指令(而且还不完全)占用的字节数,对于各个字段的作用大概不必深究,只知道几个跟文本处理有关的指令便可。
目前找到的指令占用空间为:
单字节指令:
0x04:返回指令,返回到前一个跳转的地址,相当于汇编中的ret
0x08,0x09,0x19,0x1A,0x21,0x22,0x23,0x26
双字节指令(第一个字节为指令码,后面一个字节为操作数,下同)
0x0c,0x10
三字节指令:
0x01,0x03,0x0B,0x0F,0x15
双字指令:
0x16
多字节指令:
0x02:跳转指令,后面的一个双字是跳转的偏移地址
0x07:后面接了13个字节,不知道自己有没有看漏眼orz
0x0e:字符串指令,后面一个字节是字符串的长度,假设为n,则接着的n个字节的内容都是字符串的内容。这个字符串可以是对白可以是角色名称可以是资源名可以是……

就这样,剩下的懒得分析了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值