[tamarin系列之2] avmshell命令行基础

    1、越过编译步骤

 

       我们接着说这个avmshell这个tamarin编译后最终生成的可执行文件。其实呢,当我们了解如何编译后,我们完全可以掠过这个恼人而有时又不成功的过程。

 

      我们从adobe的opensource站上弄下来flex-sdk, 并用ant编译

      svn checkout http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/ flex-sdk

      cd flex-sdk

      ant

 

      这样,我们就可以获得这个avmshell了:

             在flex-sdk/modules/asc/bin/linux下有avmplus_s

             在flex-sdk/modules/asc/bin/windows下有avmplus_s.exe

      这个avmplus_s与我们编译过的avmshell是相同的。

 

     我们再看看flex-sdk/modules/asc/bin/这个目录,你会发现很多有趣的东西,比如asc.exe就是我们上一章用到的asc.jar,而abcdump.exe就是反编译as3 swf的工具,这个反编译器的制作方法可以参考https://www.flashsec.org/wiki/Simple_AS3_Decompiler_Using_Tamarin页面下放的How to build an AS3 decompiler。

 

     而且flex-sdk/modules/asc/已经开放了源码,在src文件夹内,也就是说flex sdk\bin下的asc.exe的代码可以在这里参考。

 

     顺便提一下,在flex-sdk/modules/真的有不少好东西,可不光是asc哦,还有一个compiler, 这东西又是做什么的呢,看一下Readme发现,这个东西是用来编译mxml的,是mxmlc某种意义上的替代品,成品名叫flex-compiler-oem.jar。位置在flex-sdk/lib/flex-compiler-oem.jar。

     Readme里提供了用法:

  import flex2.tools.oem.Application;
  import java.io.*;

  public class Example
  {
      public static void main(String[] args)
      {
          try
          {
              Application application = new Application("example", new File("example.mxml"));
              Configuration c = application.getDefaultConfiguration();
              c.setLicense("compiler","0000-0000-0000-0000-0000-0000");
              application.setConfiguration(c);
              application.setOutput(new File("example.swf"));
              application.build();
          }
          catch (Exception ex)
          {
              ex.printStackTrace();
          }
      }
  }
example.mxml:

  <?xml version="1.0"?>
  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
      <mx:Label text="Hello World!"/>
  </mx:Application>

 

     然后javac -classpath ${flex.dir}/lib/flex-compiler-oem.jar Example.java,这样就可以了。     当然,这并不是真正的mxmlc,但是仍然可以使用,并且这个complier是有源码提供的哦。     至于modules下其他东西,请大家自己研究吧,再研究这个就跑题了。    2、avmshell命令行操作        上面我们简单介绍了asc工具的来历,它是专门编译AS3到.abc的工具。回忆一下上一章的图,一切都是从这个.abc开始的,为了简明,我们在前几章都假设都是用AS来生成.abc文件,而不是用ES4,因为ES4偶也没学好,呵呵,并且反正生成的.abc是一样的。之后我们可能会讲到另一个ES4的编译器,它叫esc。       首先,回顾上一章那个最简单的程序hello.as:       print(""Hello world")      它用ASC编译后成为hello.abc。      我们来看看avmshell的常用参数:      最常用的,我看就是-lifespan了。

	./avmshell -lifespan hello.abc
	输出
	Hello world
	Run time was 195 msec = 0.20 sec

    这跟time ./avmshell  hello.abc用法类似。

         另一个是./avmshell -Dverbose hello.abc ,则输出详细汇编信息。

     想要更狠更详尽的输出信息? 试试这个 ./avmshell -Dverbose_init hello.abc ,他将会把builtin的汇编信息一同输出,接下来就请看满屏幕飞的代码吧。

 

     其他常用参数

 

     -log 参数, 主要用于输出到文件。

     -Dtimeout,设置最多执行15秒

     -Dnoloops,设置禁止循环

     -Dnogc,不进行垃圾收集

     -Dgcstats,生成gc统计信息

     -Dstats ,显示优化信息统计

 

       大家可以逐个去试试,也可以去看源码部分。

 

     今天先到这里,接下来会继续深入tamarin的核心部分,如builtin内建包和shell包以及如何用native关键字融合本地C代码,进行JIT编译优化。       

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值