AVM2指令集详解(自Flash Player 9起)
AVM2 的指令集,说实话,是挺值得研究的一块料。从 Flash Player 9 开始,Adobe 就换上了这个全新的虚拟机,用来跑 ActionScript 3.0。嗯,老虚拟机那一套,基本就淘汰了。
堆栈结构的设计让执行逻辑变得更清晰,比如你写个函数调用、压个数据,AVM2 就用栈来,效率还不错。要是你以前写过 Java 或者 Lua,对这种机制应该不陌生。
常量池的存在也蛮有意思,编译时就把值定死了,运行时直接拿,速度快,逻辑也清晰。像字符串、数值、布尔都能预设,响应也快。
是名称解析,这块如果你是搞多命名空间开发的,会比较有感觉。QName
、RTQName
、Multiname
这些都是 AVM2 变量、函数时的套路,得还挺细的。
指令集方面也挺全,加载、算术、位操作、类型转换这些常规操作都在。例如用add
做加法,convert_f
做浮点转换,不会太复杂,一看就懂。新手也能快上手。
函数调用分静态和动态两种,平时用静态调用就行,性能好。动态那种留给反射或多态用吧,用太多性能就不太行了。
异常也有支持,像throw
和catch
这种,写业务逻辑时挺方便。再加上debug_line
等调试指令,排错也容易多了。
如果你对虚拟机底层感兴趣,或者在做 Flash 反编译、游戏修改啥的,强烈建议把 AVM2 的指令集过一遍。想深入点可以看看Flash AVM2 虚拟机简介和AVM2 概述,讲得还蛮系统的。
小提醒:虽然 Flash 时代已经过去,但多老项目、工具链里还有 AVM2 的影子。如果你是在维护遗留系统,或者搞安全、逆向,那 AVM2 的这些知识还是挺吃香的。
400.85KB
文件大小:
评论区