[tamarin系列之9] 在线的eval

我们先做一个实验:

 

1、构建一个测试类

public class TestA {
   
public function a() : String {
     
return " aaaa "    
}
}


2、把这段代码解析成已经包装了SWF头的ABC文件后为:

(请参考[tamarin系列之6] tamarin外篇---As3Eval
00000000  46 57 53 09 6c 01 00 00  78 00 03 e8 00 00 0b b8  |FWS.l...x.......|
00000010  00 00 0c 01 00 44 11 08  00 00 00 3f 12 49 01 00  |.....D.....?.I..|
00000020  00 10 00 2e 00 01 01 01  11 00 06 4f 62 6a 65 63  |...........Objec|
00000030  74 05 41 72 72 61 79 06  52 65 67 45 78 70 04 74  |t.Array.RegExp.t|
00000040  65 73 74 10 3c 23 69 6e  74 65 72 6e 61 6c 20 74  |est. <#internal t|
00000050  65 73 74 3e 08 69 6e 74  65 72 6e 61 6c 09 4e 61  |est>.internal.Na|
00000060  6d 65 73 70 61 63 65 06  70 75 62 6c 69 63 05 54  |mespace.public.T|
00000070  65 73 74 41 07 70 72 69  76 61 74 65 09 70 72 6f  |estA.private.pro|
00000080  74 65 63 74 65 64 01 61  04 61 61 61 61 0a 24 63  |tected.a.aaaa.$c|
00000090  6f 6e 73 74 72 75 63 74  06 24 63 69 6e 69 74 06  |onstruct.$cinit.|
000000a0  16 01 17 06 08 01 05 0a  18 0a 02 01 03 0c 07 01  |................|
000000b0  02 07 01 03 07 01 04 07  02 07 07 03 08 07 02 09  |................|
000000c0  07 03 0a 09 02 01 07 04  0b 07 04 0c 07 03 0d 04  |................|
000000d0  00 00 0d 00 00 00 0f 02  00 00 10 00 00 00 00 00  |................|
000000e0  00 01 07 08 09 05 00 01  01 0b 01 00 00 02 02 09  |................|
000000f0  06 00 05 04 08 0a 06 00  05 05 08 01 03 03 04 06  |................|
00000100  00 05 02 08 06 06 00 05  03 08 07 04 00 00 04 00  |................|
00000110  01 02 00 01 0c d0 30 f1  05 2c 0e d5 d1 08 01 48  |......0..,.....H|
00000120  47 00 00 01 05 02 00 02  15 f1 05 d0 2a 30 1d 57  |G...........*0.W|
00000130  2a d5 2a 1c d0 49 00 1d  d0 30 30 08 01 47 00 00  |*.*..I...00..G..|
00000140  02 01 01 00 01 03 d0 30  47 00 00 03 02 01 00 02  |.......0G.......|
00000150  17 d0 30 f1 05 5d 08 66  08 2a 30 58 00 1d 2a 30  |..0..].f.*0X..*0|
00000160  f1 05 1d 64 2b 68 07 47  00 00 40 00  |...d+h.G..@.|

把这个二进制文件另存为t.swf

3、新建一个FLEX工程test
然后让其加载t.swf并执行里面的a方法:

 
   
   
<? xml version="1.0" encoding="utf-8" ?> < mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml" layout ="absolute" creationComplete ="init()" > < mx:Script > <![CDATA[ import mx.controls.Alert; import mx.events.ModuleEvent; private function init():void { var loader : Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event) : void { var wrapperClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('TestA') as Class; var wrapper:Object = new wrapperClass(); trace(wrapper.a()); }); var request : URLRequest = new URLRequest("t.swf"); var context:LoaderContext = new LoaderContext(); context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); loader.load(request, context); } private function onComplete(e:Event) : void { var loader : Loader = (e.target as Loader); } ]]> </ mx:Script > </ mx:Application >



4、调试,输出结果为aaaa

=============================================

 

从1 -> 2 可以通过as3eval制作,它是不需要flex server的,也就是说不需要java等服务器支持

这完全是AS3在解析AS3的代码片段,然后生成ABC字节码

 

步骤2可以另存为文件,同时也可以参考[tamarin系列之6] tamarin外篇---As3Eval,不用持久化成文件或数据库内容,而直接读入内存,这些都是可以的

 

从上面的分析我们可以看出,步骤1可以放入数据库,需要时释放出来马上通过步骤3解析,也可以给用户一个文本框让用户及时输入,在线解析,而这一切是不通过服务器的

 

=============================================

 

利用在线解析,可以做到不用编译,直接序列化成swf文件,然后读取它就可以了,

也就是说,我们用AS3编译了AS3的代码片段

 

同时,用户可以直接输入内容,在本地进行内存编译解析,从而忽略服务器,也避免了压力

 

用户也可以通过输入定制的AS3 DSL,提交到数据库保存,使用时,提取这段DSL,进行解析就可以了,

不用再使用服务器端的JAVA编译,避免了安全问题。

 

使用AS3EVAL制作DSL会跟RUBY的DSL一样灵活,几乎可以定制任何规则,然后在本地进行解析

### Tamarin Firmware 的安装与配置指南 #### 项目简介 Tamarin 是一个开源固件开发框架,主要用于嵌入式设备的快速原型设计和功能实现。其核心目标是提供一种灵活的方式让开发者能够轻松构建自定义硬件解决方案[^1]。 #### 下载与克隆仓库 要获取 Tamarin Firmware 源码,可以通过 Git 工具从官方镜像站点下载。以下是具体的命令: ```bash git clone https://gitcode.com/gh_mirrors/ta/tamarin-firmware.git cd tamarin-firmware ``` 此操作会将整个项目复制到本地环境,并进入对应的文件夹以便进一步设置。 #### 软件依赖项准备 在开始编译之前,需确认已安装必要的工具链以及库支持。通常情况下,这包括但不限于 GCC 编译器、Make 构建工具以及其他特定于平台的支持包。对于 Linux 用户来说,可以运行如下脚本来自动完成大部分准备工作: ```bash sudo apt update && sudo apt install build-essential cmake git libusb-1.0-0-dev python3-pip -y pip3 install --upgrade pip setuptools wheel ``` 上述指令适用于基于 Debian 的发行版;如果使用其他操作系统,则可能需要调整具体软件包名称或者采用不同的管理方式来满足需求。 #### 配置过程概述 一旦基础环境搭建完毕之后,就可以按照以下方法继续进行初始化设置了: 通过执行 `make menuconfig` 命令打开交互式的选项界面,在这里可以根据实际应用场景定制化各项参数设定值。完成后保存退出即可生成适合当前系统的 Makefile 文件用于后续步骤中的正式组装工作流程之中。 最后一步就是启动真正的制造环节了——只需简单输入一条语句便能触发自动化生产流水线动作序列直至最终产物诞生为止: ```bash make all ``` 当一切顺利的话,应该能够在指定输出路径下找到新创建出来的二进制映象文档供部署测试之用。 #### 注意事项 由于该项目仍处于活跃发展阶段,因此某些特性可能会随着时间推移而有所改变甚至完全重构重写等情况发生。建议定期查看上游更新日志以保持最新状态并及时适应任何潜在变动带来的影响[^2]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值