`
prec
  • 浏览: 65384 次
  • 性别: Icon_minigender_1
  • 来自: 互联网
最近访客 更多访客>>
社区版块
存档分类
最新评论

[tamarin系列之8] 配合as3eval的as3c

阅读更多

    在[tamarin系列之6] tamarin外篇---As3Eval中, 我们讲了一个实用的as3编译和反编译工具, 下面我们介绍另一个编译反编译工具AS3C.这两者有什么不同呢,其实AS3Eval属于在线动态利用ABC进行编译和解析,而as3c更像javac或者mxmlc这样的离线编译器

 

    1、HOW  TO GET

 

        获得AS3C的方法很简单, 项目就挂在google code上(http://code.google.com/p/as3c/), 我们可以随时关注项目的发展动态和下载源码(http://as3c.googlecode.com/svn/trunk/).

 

   2、HELLO WORLD     

 

        (1) 我们可以直接粘贴项目主页的例子到FLEX中(注意直接粘贴代码有问题, 第21行多了个符号´ 去掉就可以编译了)

  1. package  
  2. {
  3.     import flash.display.Sprite;
  4.     
  5.     import de.popforge.asm.Op;
  6.     import de.popforge.asm.__asm;       
  7.     /**
  8.      * Hello World example using As3c inline asm syntax.
  9.      *
  10.      * @author Joa Ebert
  11.      */
  12.     public class Main extends Sprite 
  13.     {
  14.         public function Main()
  15.         {
  16.             __asm(
  17.                 Op.findPropertyStrict('public::trace'),
  18.                 Op.pushString('Hello World!'),
  19.                 Op.callPropertyVoid('public::trace'1)
  20.             );
  21.         }
  22.     }
  23. }

        (2) 编译这个as文件生成Main.swf, 将这个swf拷贝到as3c.exe的同级目录下

        (3) cmd, 进入控制台, 用as3c编译这个项目:   as3c.exe -inline Main.swf

        (4) 把Main.swf拷回bin-debug文件夹覆盖第(2)步生成的Main.swf

        (5) Debug测试结果, 输出Hello World!

 

        3、开始使用as3c.exe

       

         为了方便使用, as3c提供了很多个参数, 大体分为三种模式:

 

         (1) replace:  主要用于部分替换编译, 用自己写的bytecode替换掉已经存在的方法体

                                 常见用法: as3c  -replace  -o  生成的swf  -class  要替换的类  -method  要替换的方法  源swf文件  ASM文件

                                 举例: as3c -replace -o op.swf -class test -method testasm test.swf a.asm

 

                                 这一系主要可选参数如下

                                 -namespace [uri]

                                 -class [name]

                                 -method [method]

                                 -constructor

                                 -static-method [method]

                                 -static-constructor

                                 参数具体作用从字面意思就可以看出

 

        (2) inline: 使用内联的ASM进行编译

                                 常见用法: As3c.exe -o  生成的swf  -inline 源swf

                                                   As3c.exe -inline 源swf

                                 举例: As3c.exe -o output.swf -inline input.swf

                                           As3c.exe -inline input.swf

                          这种方式是最常使用的编译方式

 

      (3) dasm:  反编译

                                 常见用法: As3c.exe -o 反编译后的opcde文件  -as3c  源文件

                                 举例: As3c.exe -dasm  -o  dasm.txt  -as3c  test.swf

 

        4、是实践的时候了

 

              深入出真知, as3 opcode汇编是AS3的最底层, 也是AVM2的直接解析代码, 为了学习opcode 我们可以使用as3c.

 

              不过as3c的dasm dump出的opcode实在是太多了, 在这个时候, AS3Eval就有作用了,  我们首先打开as3Eval的url(http://eval.hurlant.com/demo)

 

              然后我们选择EvalUI, 清空TextArea里面的内容,输入一个最简单的method:     function a() {return 1},  然后我们Comple, Dump

 

             观察dump后的方法结果:

  1. function ():*   /* disp_id 0*/
  2. {
  3.   // local_count=2 max_scope=0 max_stack=1 code_len=12
  4.   0         debugfile       "test"
  5.   2         debugline       1
  6.   4         pushbyte        1
  7.   6         setlocal1       
  8.   7         getlocal1       
  9.   8         kill            1
  10.   10        returnvalue     
  11.   11        returnvoid      
  12. }

             我们可以根据结果构建出我们的inline DEMO:

  1. package {
  2.     import de.popforge.asm.Op;
  3.     import de.popforge.asm.__asm;
  4.     
  5.     import flash.display.Sprite;
  6.     
  7.     public class test extends Sprite
  8.     {
  9.         public function testasm()
  10.         {
  11.             __asm(
  12.                 Op.pushByte(1),
  13.                 Op.setLocal1(),
  14.                 Op.getLocal1(),
  15.                 Op.kill(1),
  16.                 Op.returnValue(),
  17.                 Op.returnVoid()
  18.             );
  19.         }
  20.         
  21.         public function test() {
  22.             trace(testasm());
  23.         }
  24.     }
  25. }

      然后inline编译:  as3c.exe -inline test.swf

      COPY 处理后的test.swf到bin-debug,  然后DEBUG

      输出1

 

怎么样,, 知道内部的opcode的结构答题如何了吧,  如此正反都可以练习opcode, 大家还等什么呢,  争取做一个as3 opcode高手吧

分享到:
评论

相关推荐

    tamarin-prover入门级介绍

    Tamarin Prover是一款强大的工具,专门用于形式化分析和验证安全协议的安全性。它由Simon Meier、Benedikt Schmidt、Cas Cremers和David Basin等专家开发,结合了瑞士ETH Zurich的信息安全研究所和西班牙IMDEA软件...

    as 殿堂之路

    为了进一步推动AS3的发展,Adobe采取了一系列开源措施,包括将AVM2虚拟机开源并捐赠给Mozilla的Tamarin项目。这一举措不仅增强了开发者对AS3的信心,也促进了AS3技术的广泛应用和发展。 #### 五、Adobe Integrated ...

    网络安全协议形式化分析验证工具Tamarin的用户手册

    10. **相关工具链**:介绍与Tamarin配合使用的其他工具,以增强分析能力和提高效率。 通过学习Tamarin,用户不仅可以掌握协议分析的基本概念,还能提升其在网络安全领域的专业能力,有效地预防和应对潜在的安全威胁...

    Flash_ActionScript3殿堂之路.pdf

    - **Tamarin项目**:源码捐赠给Mozilla的Tamarin项目,这表明AS3正积极拥抱开源社区。 #### 4. Adobe AIR的意义 - **跨系统运行时**:2007年推出的Adobe AIR Beta版本,实现了RIA程序可以在多个操作系统上运行的...

    PyPI 官网下载 | tamarin-utils-0.14.5.tar.gz

    **PyPI 官网下载 | tamarin-utils-0.14.5.tar.gz** 这个压缩包文件`tamarin-utils-0.14.5.tar.gz`来源于Python的官方软件仓库PyPI(Python Package Index),它是一个包含众多Python库的地方,方便开发者下载和分享...

    tamarin-prover:Tamarin证明程序的主要源代码存储库,用于安全协议验证-Verification code source code

    Tamarin证明者资料库 本自述文件描述了Tamarin证明者用于安全协议验证的存储库的组织。 它的目标受众是Tamarin证明者的感兴趣的用户和将来的开发人员。 有关Tamarin证明器的安装和使用说明,请参见手册的第2章: : ...

    redtamarin, 在 命令行/server 端,运行 AS3.zip

    redtamarin, 在 命令行/server 端,运行 AS3 redtamarin简而言之,redtamarin是基于 Tamarin项目( 例如。 Flash Player 虚拟机),并允许在命令行上运行AS3代码。因为Tamarin只支持,( 对象,array,等等 ),...

    基于Tamarin的5G AKA协议形式化分析及其改进方法_.pdf

    基于 Tamarin 的 5G AKA 协议形式化分析及其改进方法 本文主要介绍了基于 Tamarin 的 5G AKA 协议形式化分析及其改进方法。在 5G 移动通信网络中,3GPP 组织标准化了 5G AKA 协议,用以身份认证和密钥协商。文章...

    tamarin:小而简单的 Ruby Web 服务器

    gem 'tamarin' 然后执行: $ bundle 或者自己安装: $ gem install tamarin 用法 运行服务器: bundle exec ruby lib / tamarin 然后,在其他终端运行: curl http : //localhost :3030 贡献 分叉它( )...

    PyPI 官网下载 | tamarin-utils-0.15.1.tar.gz

    《PyPI上的tamarin-utils-0.15.1.tar.gz:Python库解析与应用》 在Python的世界里,PyPI(Python Package Index)是最重要的软件仓库,它为开发者提供了无数的工具和库,便于他们构建和分享自己的项目。本文将深入...

    Action Script 虚拟机-AVM2 源码

    AVM2的设计目标是提高ActionScript 3(AS3)的性能,AS3是一种面向对象的、强类型的编程语言,广泛应用于富互联网应用程序(RIA)的开发。AVM2引入了诸如类、包和命名空间等新特性,以及垃圾收集机制,提供了更好的...

    PyPI 官网下载 | tamarin-utils-0.8.5.tar.gz

    `tamarin-utils`正是针对这样的需求而设计的,它提供了一系列与Zookeeper交互的Python接口,使得开发者可以更方便地在Python代码中使用Zookeeper的服务。这包括但不限于创建、删除、更新Zookeeper节点,以及监视节点...

    EMVerify:Tamarin模型和EMV分析

    EM验证 这是EMV标准的模型,是我们IEEE S&P 2021论文EMV标准:Break,Fix,Verify的补充材料。 有关这项工作的详细信息,请访问 。... :GNU脚本,用于生成目标模型并对其进行Tamarin分析。 *.oracle

    Python库 | tamarin-utils-0.15.4.tar.gz

    《Python库tamarin-utils-0.15.4:实用工具集详解》 在Python的广阔天地里,各种库犹如繁星点缀,为开发者提供了强大的功能支持。其中,`tamarin-utils`是一个实用的工具集合,它在版本0.15.4中为我们带来了诸多...

    ActionScrip殿堂之路TXT版

    2. **系统资源管理**:除了异常处理之外,AS3.0还提供了一系列工具和API帮助开发者更好地管理系统的资源,比如内存和CPU使用情况。 - **Adobe Integrated Runtime (AIR)**:2007年发布的Adobe AIR Beta版本,为...

    EMVerify-PAN-routing:Tamarin模型和EMV非接触式分析

    是GNU脚本,用于生成目标模型并对其进行Tamarin分析。 *.oracle是证明支持的*.oracle 。 包含自动生成的目标模型( .spthy )及其证明( .proof )。 以HTML格式显示分析结果。 包含有用的脚本: 是一个Python...

    Tamarin HD Wallpapers Game Theme-crx插件

    语言:English (United States) 包括Tamarin的HD图像动作冒险视频游戏。 对于Banjo Kazooie Donkey Kong和Mario 64的粉丝! 包括Tamarin的高清图像,动作冒险视频游戏。... 3:没有广告或恼人的弹出窗口

    thane:用于 MSOY 的 Tamarin VM 的修改版本

    Thane 是 Tamarin ( ) 的一个轻微修改版本,具有部分 Flash Player 兼容层,主要用 ActionScript 编写,并带有一点原生胶水。 引擎本身被修改为在 x86_64 架构下的 Unix 平台上运行。 现有的 Windows/64 支持已扩展...

Global site tag (gtag.js) - Google Analytics