问题标签 [jvm-bytecode]

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 回答
510 浏览

java - 字节码中丢失了变量“最终”修饰符?

分析这个简单类的字节码,我得出的结论是编译器没有保留任何关于局部变量的信息final。不过这看起来很奇怪,因为我相信 HotSpot 编译器实际上可以使用这些信息进行优化。

代码

字节码

除了节省磁盘空间之外,是否有任何特定原因保留局部变量的访问标志?因为对我来说,存在似乎final是变量的一个相对重要的属性。

0 投票
2 回答
537 浏览

java - 可以将同步块简化为字节码级别的 Try-Finally 块吗?

为类似 Java 的语言编写自己的编译器时,我无法编译synchronized blocks. 我想出了以下想法将它们简化为try-finally块:

可以换成

其中_monitorEnter_monitorExit表示MONITORENTERMONITOREXIT说明。

我对如何synchronized编译的这个假设是正确的,还是我遗漏了什么?

编辑

我的实现以前在正文中对returnthrow语句进行了一些特殊处理。基本上,它会在每个or指令之前手动加载所有lock变量和它们。这是由块处理,还是我仍然需要这些检查?MONITOREXIT*RETURNTHROWfinally

0 投票
2 回答
4279 浏览

java - 如何从类中获取字节码作为字节数组

给定一个任意Class实例,包括一个运行时生成的实例(.class磁盘上没有文件),有没有办法获取类字节?

0 投票
2 回答
51 浏览

java - 将大量二进制数据加载到原始 JVM 字节码中的“[B”中

我正在以Krakatau语法生成 JVM 字节码,以将大型二进制 blob 加载到[B. 关键是将所有实际数据存储在.class文件中,而不是在运行时从外部源读取它。

我生成的代码如下所示:

但是,在运行时,此方法会失败,因为它太长了:

有没有更好的方法将大型二进制 blob 加载到字节数组中?我想一种解决方法是保留我当前的代码,但将其拆分为几种方法,但这太可怕了......

0 投票
0 回答
164 浏览

java - ASM 分析 MethodNode 故障

我想知道我是否可以直接创建一个MethodNode然后分析它。因此,我编写以下代码进行测试:

不幸的是,调用时抛出异常_analyzer.analyze()

我相信这是由 and 的未设置引起maxStackmaxLocals。看来我必须计算正确maxStackand maxLocals,然后visitMax()在这里调用。有没有其他方法不计算这两个值?

我之前使用的另一种方法是一些代码,例如:

这可行,但我不喜欢它,因为它包括对 MethodNode 的多次访问。

目的:

我想为每个类实例生成一个 MethodNode,并且每个实例都保留对生成的实例的引用。在第一个代码中,我的想法是直接创建一个ClassNode和目标MethodNode,在此期间让_node指针直接指向目标MethodNode。这样整个ClassNode就只有1次访问,即在ClassNode创建过程中获取MethodNode。

对于第二部分代码,使用 ClassWriter 并访问它。之后cw.visitEnd(),我必须再次访问它以获得ClassNode,即reader.accept(classNode, 0);。该班有两次来访。

0 投票
3 回答
13481 浏览

android-studio - Kotlin 字节码 - 如何在 IntelliJ IDEA 中分析?

我想查看编译后的字节码,以便了解更多关于它如何在幕后工作的信息。我正在使用IntelliJ IDEA 15,但找不到查看字节码的方法。我错过了什么?

0 投票
2 回答
960 浏览

java - 使用 ASM 进行字节码分析

我正在评估使用 ASM 作为框架来实现一些字节码分析的可能性。到目前为止,我一直在玩一些示例,但有几件事需要整理:1)我看不到如何使用 MethodVisitor 类检测方法的完全签名(完整的参数类型名称和形式名称)。

2)如果正在分析的.class文件关联了java源,如何将字节码指令与源中的行号链接起来

3)如何区分ClassVisitor中的实例字段和静态字段

0 投票
2 回答
822 浏览

jvm - 完整的 ASM 代码示例(仅分析)

是否有任何好的端到端 ASM 示例,但仅用于解析和分析字节码?我发现了很多涉及字节码生成的例子,但是像数据流分析或控制流分析这样的分析呢?

0 投票
2 回答
175 浏览

java - 理解为一个简单的 java 类生成的字节码

我正在关注这个博客来研究 java 到字节码,并且我已经为这个 SimpleClass 生成了字节码。

我理解字节码位置如下

  • 0 代表“这个”
  • 1 用于调用超类 Object 的构造函数。
  • 4——?
  • 5 代表价值 5
  • 6 从堆栈中弹出并将 5 分配给变量。

但我不明白aload_0位置 4 及其目的?

0 投票
1 回答
126 浏览

compilation - 可能优化字节码序列

我在内联多方法调用后生成了一个字节码序列。内联开始时,我首先将现有变量索引弹出到一个新的局部变量编号,以防内联方法出现任何异常。这个操作会在最终的字节码中产生一些 xLOAD 和 xStore 序列。样本是:

我想知道是否有一些众所周知的优化来消除这些 xLoad/xStore 序列。

谢谢