问题标签 [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.
jvm-bytecode - 读取和显示 Java .class 版本的工具
你们有谁知道一个工具可以搜索 .class 文件,然后显示它们的编译版本?
我知道您可以在十六进制编辑器中单独查看它们,但我有很多类文件要查看(我的巨型应用程序中的某些内容由于某种原因正在编译为 Java6)。
java-bytecode-asm - 动态 Java 字节码操作框架比较
有一些用于动态字节码生成、操作和编织的框架(BCEL、CGLIB、javassist、ASM、MPS)。我想了解它们,但是由于我没有太多时间了解它们的所有细节,所以我希望看到一种比较图表,说明一个与另一个的优缺点以及对它们的解释为什么。
在 SO 中,我发现很多问题都在问类似的问题,答案通常是“你可以使用 cglib 或 ASM”,或者“javassist 比 cglib 好”,或者“BCEL 已经老了,快要死了”或者“ASM 是最好的,因为它给出了 X 和 Y”。这些答案很有用,但并没有完全回答我想要的范围内的问题,更深入地比较它们并给出每个的优缺点。
android - 如何使用 dedexer 解释这个反汇编的行?
以下是在 android 市场应用程序上使用 dedexer 反汇编的 snipcode,在 中,invoke-virtual
我不明白原始 Java 代码是什么:
invoke-virtual {v0},[Lcom/google/android/providers/AbstractGDataSyncAdapter$ClientDiffType;/clone ; clone()Ljava/lang/Object;
[
应该是一个数组,那么它是在类型数组中的元素上调用方法clone
吗com/google/android/providers/AbstractGDataSyncAdapter$ClientDiffType
?那为什么;
在类名和方法名之间有clone
呢?dedexer 本身的错误?
android - Dalvik 字节码中的“抛出”和“异常注释”
为什么生成字节码为
而不是.throws Ljava/io/FileNotFoundException
如果一个方法throws FileNotFoundException
在java代码的头文件中声明?
if-statement - 如何为 if-else 语句生成字节码
如何使用可选的 ELSE 分支生成与字节码指令对应的代码 IF THEN - ELSE?
例如,程序 If-else.pas 被认为是正确的,而程序 If.pas 则被认为不正确,因为它不包含 ELSE 分支。
if-else.pas
如果.pas
所以 Jasmin 给了我这个错误:
Output.j:62:JAS 错误:标签:L11 尚未添加到代码中。
Output.j: 发现 1 个错误
我的语法 .g 有这个规则:
对于 if-else 语句,我写了这个:
但是通过这种方式,第二个分支不是可选的,而是必须始终存在。我如何使它成为可选的?我认为问号 ( ( 'else' s2 = stmt )?
) 是必要的,但没有。我正在使用 ANTLR。
谢谢。
我不知道 Jasmin 生成的字节码文件(.j)是否有用,但我写了它。
如果-else.j
如果.j
java - Java 字节码签名
作为我正在研究的编程语言的编译器的一部分,我在字节码中遇到了通用签名,我正在尝试对其进行解析并转换为 AST。解析算法大部分都有效,但似乎有一种特殊情况,这些签名的格式表现得有点奇怪。以下是其中一些案例:
在这些类中的所有方法中,只有这些方法::
在其签名中。我的问题是这个令牌做什么以及它为什么存在。
编辑
我知道Java Language::
中的运算符,但这是字节码级别的东西。
java - JVM 常量池条目
查看在某些类上运行的输出javap
,我遇到了以下奇怪现象:
一些类的常量池包含诸如
为什么这些常量会出现在常量池中?
java - 为什么没有ICMP指令?
你们中的一些人可能知道,我们有大量的操作码来比较不同类型的原始值:
由于显而易见的原因,指令集的创建者并没有费心添加所有IF_LCMPEQ
, IF_FCMPLT
, ... 指令,但我想知道为什么没有ICMP
指令,因为它特别适用于布尔值或Integer.compare(int, int)
.
java - 带有输出值的 ASM Try/Catch 块
我目前正在尝试使我的自定义编译器允许try/catch
用作表达式,即在堆栈上留下一个值。类型检查器和后端已经支持这一点,但问题似乎是 ASM 的COMPUTE_FRAMES
. 使用以下代码进行检测:
编译这段代码:
VerifyError
我在类加载时得到以下信息:
由于我认为 ASM 在计算try/catch
具有输出值的块的堆栈帧时没有问题,所以我的检测代码有问题吗?(请注意ClassWriter.getCommonSuperclass
,虽然这里不需要,但已正确实现。)
java - 内部类中断 Eclipse 代码完成
我在 Eclipse 禁用导入二进制文件的 Java 类中的所有代码完成时遇到了严重问题。二进制文件由自定义编译器编译为基于 JVM 的自定义编程语言,代码如下所示:
Entry
是接口里面的一个Map
接口,都是Java写的。编译器显然对这段代码没有任何问题,并生成以下字节码(来自javap
):
从任何 Java 类导入Test
该类会导致 Eclipse 抱怨No completions available
,并且CTRL-Hover
不再工作。为了找到问题,我创建并javap
编辑了上述类的 Java 等效项,产生以下结果:
测试.java:
javap输出:
我设法找到了由 class 引起的问题implements Entry[A, B]
,但我还无法识别字节码中的实际问题。我的编译器生成的字节码有什么问题吗?除了包名和行号之类的东西,我找不到两个类的字节码之间的显着差异。
如果这不是编译器的错,我只有ANTLR 4
,Bytecode Outline
和Eclipse Class Decompiler
插件。