问题标签 [avm2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
177 浏览

actionscript-3 - 访问脚本变量属性的意外行为

我尝试执行以下 actionscript3 程序,我对调用 f() 函数的结果感到惊讶。我期待 f() 的结果是“1”或至少是“未定义”,但“0”值对我来说没有任何意义。

如果您有这种行为,或者知道您是否认为这种行为是“正常的”,我将很高兴对此行为有一个很好的解释。我想明确一点,我正在研究动作脚本程序的行为,以了解 AVM2 的真正工作原理,因此我不是要求等效代码来做同样的事情。因此,如果您有其他棘手的示例,我也很感兴趣。

注意:我使用以下命令行编译了这个程序:

0 投票
1 回答
1955 浏览

flash - 为什么 Flash ActionScript3 编译器会发出不必要的代码?

我最近为 AVM2/AS3 制作了一个反编译器,我注意到 Flash 编译器往往会发出很多不必要的代码。例如,对于某个应用程序,我已经删除了大约 10% 的代码,而对功能没有任何损害。它只是一个没有被条件操作码或异常处理块引用的肯定死代码。

另外,看看这个片段:

好吧,这当然是无效的代码,它也是死的,因此不会造成任何不利影响(除了代码库膨胀)。但是为什么它会发出那个代码呢?为什么验证者会接受呢?

0 投票
3 回答
238 浏览

flash - Adobe AS3-“Core-Libraries”如何发挥作用?

首先,我无法决定我应该在这里还是在“程序员”问这个,请温柔;)

我想知道在我称之为 AS3 的“核心库”的内部发生了什么(是的,在这种情况下这可能不是确切的术语,但现在你知道我的意思了)。

例如,当我输入:

...图形对象中究竟发生了什么?我假设它将调用 AVM2 的渲染 API,但这看起来如何?有什么办法可以查看它,或者这些资源是否对 Adob​​e 以外的任何人完全关闭?

谢谢!

0 投票
0 回答
402 浏览

actionscript-3 - 如果其任何属性发生更改,Flash 会停止将关键帧信息应用于 MovieClip?

假设我有一个带有盒子(实例名称“盒子”)的 3 帧影片剪辑。每一帧都对盒子应用不同的模糊,所以它在第 1 帧有点模糊,在第 2 帧有点模糊,在第 3 帧非常模糊。

我可以在三个帧中的任何一个上调用“gotoAndStop”,并且将应用正确的模糊,并且我可以根据需要多次执行此操作而不会出现问题。

但是,如果在任何时候我更改了框的宽度,例如“box.width = 100”,那么突然当我调用“gotoAndStop”时,不再应用关键帧信息并且框的模糊不会改变。如果我在第 2 帧上也添加位置更改,则会出现相同的行为......位置更改在 gotoAndStop 上起作用,直到我更改框的宽度,然后当我进出该帧时它不再移动。

为什么当我更改关键帧对象上的“宽度”等属性时,Flash 会停止应用这样的关键帧信息?

0 投票
1 回答
1030 浏览

flash - 从 AVM2 字节码回到动作脚本?

我目前有一个解压缩和反编译的 .swf 文件。我一直在寻找有关如何使用 ABC 字节码的教程,但我没有找到太多。是否有可以将其转换回 ActionScript 3 的调试程序?

飞2会这样做吗?或 Adob​​e Flash 投影仪调试器?还是 AS3 巫师?

0 投票
5 回答
641 浏览

performance - What are the negative impacts of extending classes in ActionScript 3?

In my game engine I use Box2D for physics. Box2D's naming conventions and poor commenting ruin the consistent and well documented remainder of my engine which is a little frustrating and presents poorly when you're using it.

I've considered making a set of wrapper classes for Box2D. That is, classes which extend each of the common Box2D objects and have their functions rewritten to follow the naming conventions of the rest of my engine, and to have them more clearly and consistently commented. I have even considered building ontop of some of the classes and adding some bits and pieces (like getters for pixel-based measurements in the b2Vec2 class).

This is fine but I am not 100% sure what the negative impacts of this would be and the degree to which those would affect my applications and games. I'm not sure if the compiler alleviates some of my concerns to a degree or whether I do need to be considerate when adding somewhat unnecessary classes for the sake of readability and consistency.

I have some suspicions:

  • More memory consumption to accommodate the extra level of class structure.
  • Performance impact when creating new objects due to initializing an extra level of members?

I am asking specifically about runtime impacts.

0 投票
1 回答
83 浏览

actionscript-3 - JIT 会保护我的 dicenumber 变量不被操纵吗?

我正在制作一个类似于“大富翁”游戏的基本游戏。您必须掷骰子并移动掷骰子的位置数(1-6)。

一个代码示例将是这样的:

但是我担心这段代码是否足够安全,可以防止一些可能的操作(例如使用作弊引擎来更改滚动的数字)。我实际上试图“破解”我的游戏,但只成功地改变了 randRange 函数的数字,所以我可以掷骰子,比如说,一个特定的数字或更短的数字范围。但我只能在玩之前这样做(在我的游戏中按下开始按钮)。当我再次尝试更改值时,什么都没有改变(好吧,我不是一个黑客......)。

我做了一些研究,发现 Actionscript 虚拟机的 JIT 编译器可能是我失败的罪魁祸首,因为它将我的游戏(SWF)编译成在 CPU 上运行的机器代码。据我所知,JIT 编译器在第一次运行之前不会编译函数,但是一旦编译完成,该函数的 SWF 字节码就再也不会被访问。

现在的问题是:有没有办法在使用Cheat Engine等程序调用函数后改变掷骰子的数量?

0 投票
1 回答
55 浏览

virtual-machine - Mozilla Tamarin 的状态是什么?

维基百科声称 Mozilla 下的 Tamarin 是活跃的,但它根本没有在 mozilla 实验室项目下列出,而且似乎 MDN 中的所有文档都在“过时”部分。项目还支持吗?

0 投票
1 回答
90 浏览

actionscript-3 - 方法可以重叠执行吗?

概括:

我试图找出在单个线程上执行时单个方法是否可以重叠执行两次。或者,如果两个不同的方法可以重叠执行,当它们共享对特定变量的访问时,可能会发生一些不需要的行为。

单一方法的例子:

问题:

1)如果method1使用事件系统每20ms触发一次,并且整个方法执行时间超过20ms,该方法是否会再次重叠执行?

2) 在单线程环境中是否存在可以重叠执行方法的任何其他场景,或者 AVM2 是否仅限于一次执行 1 个方法?

研究:我已经阅读了https://www.adobe.com/content/dam/Adobe/en/devnet/actionscript/articles/avm2overview.pdf,其中解释了 AVM2 有一个用于运行代码的堆栈,以及对methods 看起来,如果没有第二个堆栈,堆栈系统一次只能容纳 1 个方法执行。我只是想与 StackeOverflow 专家再次确认一下。

我正在处理一些时间敏感的数据,并且必须确保一个方法不会更改同时被另一个方法访问的变量。

0 投票
1 回答
72 浏览

avm2 - 尝试修改 AVM2 字节码时的 VerifyError #1023

我正在尝试从 RABCDasm 修补 SWF 的字节码。这是我的补丁:

我得到了错误VerifyError #1023 stack overflow occurred。我的补丁有问题吗?原始 SWF 使用 FlasCC,我正在修补由 FlasCC 生成的文件。我相信_loc3_是一个字符串缓冲区。