winulator吧 关注:1,214贴子:2,384

关于winulator转换文件的原理分析

只看楼主收藏回复

前不久在论坛里看到了winulator这个小东西,感觉挺神奇的,才几兆竟可以使1.4g的starcraft很流畅的运行在android上。相比之下bouchs的虚拟机多少有些逊色。


1楼2013-12-13 22:37回复
    在高兴之余我也不时的再找有没有更多的转换游戏,于是就上网搜了下,貌似就两个,一个星际另一个是凯撒3,有点失望,偶然间发现了国人转换的handkercief,由于是老玩家了。当时的激动之情油然而生呢。兴冲冲的下来之后才发现怎么弄都没办法玩。很伤心,可是又很好奇到底是哪里做错了。于是就花了一下午对winulator进行了一番研究。


    2楼2013-12-13 22:41
    回复
      首先必须要讲的是,确实是上当了,因为那个根本就是假冒伪劣产品,根本不能玩,具体分析以下展开。
      winulator这个软件和mac机上的crossover差不多,也是通过对程序地址的偏移运算实现的,这一点从最初的凯撒3的转换文件可以看出来。
      这个程序要实现转换至少需要两个文件,一个是对具体程序的描述文件,包括地址偏移的具体规则,一般叫做 XX.WCH。另一个是profile文件,这个文件是对x86和android的接口,告诉转换器exe在哪里。转换器要做的是将exe部分的api按照wch的描述进行偏移,然后打包成一个成品文件。


      3楼2013-12-13 22:50
      收起回复
        有同学可能要问了,为什么2.0以后的版本只要一个profile文件就可以了?因为根据原作者的官方说法,我已经将那部分api的转换规则写进了程序里,不再需要pc端的操作,也就是不需要转换器这个东西的存在了。这也就解释了为什么wch helper只有1.4.1版了。


        4楼2013-12-13 22:52
        收起回复
          其实实现游戏转换最重要的是wch文件的编辑,这个文件由hash码、jumptable(偏移规则)、indirectjumptable(间接偏移量)三部分构成。hash码的作用是标记程序。以凯撒3的转换文件为例,这里面有5个hash码,如果你逐个的去依据hash码找文件会发现这5个是同一个文件,叫c3.exe,凯撒3的执行文件(原作者blog上说是为了适配不同的版本)。jumptable和indirect jumptable这两部分和exe的内存地址很像,而且有大小区间的限制,我想应该是api的转换规则,或者是内存使用规则,c语言学的不好,只能解释到这里了。


          5楼2013-12-13 23:00
          回复
            profile文件的编辑很简单,就是告诉转换器 exe文件的地址,这个正常人一看就会。


            6楼2013-12-13 23:00
            回复
              接下来我们就看看国人转换的这个奇葩成果吧。

              从表面上看没问题,但是仔细看就会发现 那个dll文件,这个游戏根本就用不到。如果带着这条规则,你没这个,转换器会告诉你找不到文件;你有这个,转换器会告诉你错误,因为游戏用不到,程序不会调用,api也就无从转换了。坑爹啊


              7楼2013-12-13 23:05
              回复
                最后时profile文件了,这个好歹还有点良心,但是您好歹把最后的那两段删了吧,一个act游戏怎么会有rts特有的maps文件夹。。。


                9楼2013-12-13 23:11
                回复
                  还有,最后就是随包附送的游戏,因为是精简过的,hash值读不出来,转换器会提示too few bit。我特地换成了英文原版之后,才发现的hash这个东西的真正作用。


                  10楼2013-12-13 23:14
                  回复
                    总之,我写这个东西不是为了黑谁也不是为了难为谁,主要是想给大家科普下winulator的基本知识,同时也想表达一下我心中的怒火,假货骗人的东西始终是假的,不但浪费玩家的感情也浪费别人的时间。同时呢,也希望国人能真正的做出些“移植”。


                    11楼2013-12-13 23:18
                    收起回复
                      不喜勿喷,纯属个人见解。


                      12楼2013-12-13 23:18
                      收起回复
                        楼主辛苦了


                        IP属地:江苏来自Android客户端13楼2013-12-15 18:55
                        收起回复
                          官方到底有没有动作
                              –––––大家好我是新人,如果有什么冒犯的地方。你他妈来打我啊!


                          IP属地:湖北来自Android客户端14楼2013-12-15 20:58
                          收起回复
                            可以自己搞转换吗?


                            IP属地:广西来自WindowsPhone客户端15楼2013-12-15 23:16
                            收起回复
                              不明觉厉


                              IP属地:湖北来自Android客户端16楼2013-12-16 08:45
                              收起回复