问题标签 [jasmin]

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

java - 转换为二进制 Java 类时的 Jasmin NoSuchMethodError

我正在尝试使用 Jasmin 将 Jasmin 汇编代码转换为 Java 类文件。使用此处的 Hello World 示例。

返回以下错误:

我怀疑这可能是 Java 版本的问题,因为 Jasmin 似乎很旧并且可能使用较旧的 Java 版本实现。

到目前为止,我已尝试使用以下命令运行示例:java -jar jasmin.jar test.j.

我曾尝试使用 Java 8、7、6 和 4 运行它,但均未成功。

我使用的 Jasmin 版本是 2.4。

此外,我还尝试下载 Jasmin 的源代码并手动编译,结果相同。

有人对如何解决此问题有任何指示或想法吗?

0 投票
1 回答
148 浏览

jvm - 为什么 Jasmin 不喜欢这个汇编代码?

我正在阅读 Joshua Engel 的 Java 虚拟机编程,并尝试输入书中的一个示例。我知道这本书使用了乌龙,而我使用的是 Jasmin,但是对于这样一个简单的示例,并且由于 Oolong 和 Jasmin 的语法非常相似,我不明白为什么这不起作用。作为旁注,我无法找到有关 Oolong 和 Jasmin 之间语法差异的任何信息。谁能指出我这样的资源?

这是代码,与书中的完全一样:

当我对此运行 Jasmin 时,出现以下错误:

那么我做错了什么?

0 投票
1 回答
866 浏览

java - 堆栈高度不一致 1 !=2

所以我试图在 Jasmin 中创建一个简单的 for 循环,每次通过循环时都会打印出 hello world。问题是每当我尝试通过添加一个来增加它时,我都会收到以下错误消息:“错误:无法初始化主类测试,原因是:java.lang.VerifyError:(类:测试,方法:主签名:([Ljava /lang/String;)V) 堆栈高度不一致 1 != 2" 当我不尝试添加一个时它可以工作,但不确定为什么当我放回它时它不会。任何帮助将不胜感激!

0 投票
1 回答
260 浏览

java - 运行 jasmin assembler 以获取 .class 文件并将其转换为 java

我在项目的终端(在 IntelliJ 想法中)运行此命令,并且我已经包含了 jasmin.jar 库。根据 Jasmin 的这个文档,它应该位于/tmp/mypackage/MyClass.class. 但我没有看到任何包。

知道这是如何工作的吗?

0 投票
1 回答
101 浏览

java - 在不创建常量池的情况下编译/反汇编 Java?

我无法理解某些 Java 字节码指令的用法,部分原因是缺乏示例。相反,我使用javac或 Jasmin 来编译一些常规的 Java 代码,然后我使用javap -c来检查生成的字节码。

我的项目建立在为我优化字节码的框架上,因此我自己的代码生成器不必为我管理常量池。由于javap输出包含对常量池的大量引用,因此如果我自己不必使用这些引用,那并不能真正清除用法。

有没有办法在没有符号表(或对它的任何引用)的情况下获得反汇编的字节码?

为了详细说明,假设我们有以下代码:

这解决了:

但我宁愿拥有以下内容:

如果像提供给我的框架一样,编译器在生成第二个示例中描述的字节码后创建常量池,那么应该可以获得根本不包含符号表的字节码,对吧?

0 投票
1 回答
69 浏览

java - 将数组作为 arg 放入 java 字节码中的函数

我正在尝试使用 Jasmin 字节码将数组传递给函数。它会生成一个正确的类,但在我尝试运行它时会出错:

java.lang.VerifyError: (class: test4, method: main signature: ([Ljava/lang/String;)V) Register 1 contains wrong type

这里有什么问题?提前谢谢你的帮助!

我的字节码:

java类:

0 投票
1 回答
149 浏览

bytecode - Jasminbytecode 说它缺少指令 goto 的参数

我正在尝试在我的 jasmin 字节码程序中实现分支,但无论我尝试什么,我总是在分支上遇到语法错误。代码应该检查这两个数字是否相等,如果为真则打印“真”,否则跳转到结束标签并退出程序。

我以官方 jasmin 说明页面为例。

错误:

Jasmin 字节码文件:

0 投票
0 回答
83 浏览

jvm - 堆栈上有东西时,VerifyError 清空字节码中的堆栈

我有以下代码在使用 2 个打印语句运行时会出现错误,但是当我只执行一个时它运行良好。如果我是正确的,ldc 只是将字符串推入堆栈,因此在调用第二个打印行时,它应该仍然有一些东西在堆栈上。

错误:

0 投票
1 回答
89 浏览

jvm - 组装 jasmin 类导致倒置运算符和比较

当我尝试使用命令行组装我的test.jjasmin 文件时,java -jar Jasmin.jar test.j它会生成test.class没有任何错误的文件。除了运算符和比较之外,所有代码都是相同的,all my +will become -==all become!=等等。

我的test.jjasmin 文件添加了 2 个数字并检查它们是否等于 7,如果为 true,则打印一些内容,否则打印其他内容。最后它总是会打印一行文本。

test.j文件:

组装好的test.class5 - 3 != 7应该在5 + 3 == 7这里:

0 投票
1 回答
334 浏览

jvm - Java字节码,调用方法不能正常工作

当前情况和背景

对于学校作业,我们必须编写自己的编程语言。目前,我一直在尝试进行方法调用。

我可以成功地创建一个方法,但是在我试图调用它的时候,程序中断了。

测试代码

我用来测试的代码是

这会生成以下代码

  • 反编译类
  • Java字节码

我试过什么

我尝试使用以下 Java 字节码调用该方法:

(测试是我正在测试的类的名称)

  • 调用虚拟 void/testMethod()V
  • 调用虚拟测试方法()V
  • 调用虚拟测试/testMethod()V
  • 调用虚拟测试/void/testMethod()V

我很感激任何帮助