- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正忙于使用 ASM 4.1 编写编译器。我需要将一种中间语言编译成 java 字节码。我发现 ASM 4.1 API 说,“事实上,这些节点必须 (*) 插入到任何指令节点 i 之前,该指令节点 i 遵循无条件分支指令,例如 GOTO 或 THROW,这是跳转指令的目标,或者启动一个exception handler block。” 但是,我在ASM指南(“ASM 4.0 A Java bytecode engineering library”)中找不到Frame的用法。谁知道Frame的用法? visitFrame/FrameNode的各个参数是什么意思?为什么我使用 ASMifier 有时会得到一个“visitFrame(Opcodes.F_APPEND,...)”而在其他时间得到一个“visitFrame(Opcodes.F_SAME,...)”?我无法理解!!例如,如下代码:
int a = 2;
int b = 3;
if(a == 3){
System.out.println("hello");
}else{
System.out.println(a);
if(b == 23){
System.out.println("world");
}else{
System.out.println(b);
}
}
通过使用ASMifier,我可以得到结果(抱歉,我没有enghou声誉,我不能附上图片),并且有这样的指令:“visitFrame(Opcodes.F_APPEND,2,new Object []{ Opcodes.INTEGER, Opcodes.INTEGER}, 0, null)”。能告诉我参数的含义吗?
非常感谢。
最佳答案
您可以在下面的链接中找到详细的答案。
Is there a better explanation of stack map frames
Java 1.7 引入了这个选项来加速类验证。框架有两部分:变量类型和堆栈类型。第一帧由方法类型描述、初始 ?STORE 调用和方法返回类型确定。
在每次 GOTO/JUMP 调用后,您需要提供堆栈映射框架的更新描述。为了节省空间,您可以使用 SAME、APPEND 等选项,或者您可以通过指定 FULL 变量类型数组来再次描述所有变量。
例如,在 CATCH 部分,您的 Retrun Stack Type 已从方法返回类型更改为异常类类型以捕获异常。
如果您使用 goto 命令在不同的循环 block 之间跳转,则每个循环的执行 block 可能会对循环中使用的变量使用不同的帧描述。
关于java - ASM(Java的字节码工具)中的Frame如何使用? visitFrame/FrameNode的各个参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17727572/
我正在从一个 JAR 文件中读取一堆类,我计划在其中用 Java 注入(inject)一个简单的方法(然后转储新的 jar),该方法将一些数据发布到 PHP 文件: public static voi
我正忙于使用 ASM 4.1 编写编译器。我需要将一种中间语言编译成 java 字节码。我发现 ASM 4.1 API 说,“事实上,这些节点必须 (*) 插入到任何指令节点 i 之前,该指令节点 i
我是一名优秀的程序员,十分优秀!