`
谁解怨妇心
  • 浏览: 27298 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
    脚本是编译型的脚本,虽然没加密,但不去调试的话就很难分析。
    脚本第一个DWORD是一个偏移,跳转到脚本的那个偏移处的第一个双字是脚本的入口偏移,游戏从那个偏移处开始对脚本进行解释。
    下面这段东西就是指令操作的过程。跟vmp那指令解码的过程很像,嗯。
引用

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

    目前我就观察到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个字节的内容都是字符串的内容。这个字符串可以是对白可以是角色名称可以是资源名可以是……
   
     就这样,剩下的懒得分析了。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics