问题标签 [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 投票
4 回答
2748 浏览

java - CLASSPATH 中的茉莉花

我已经从http://sourceforge.net/project/showfiles.php?group_id=100746下载了 jasmin.jar

我已将 CLASSPATH 更改为以下内容:

以下命令可以正常工作:

但以下不起作用:

我想知道我做错了什么以及如何修复它,所以我可以轻松地从命令行运行 Jasmin 并将 jasmin 代码转换为 .class。

我没有在以下位置找到任何有用的信息:http: //jasmin.sourceforge.net/guide.html 其中说:

jasmin.jar 文件是运行 Jasmin 的可执行 JAR 文件。例如:

或者

(如果 jasmin.jar 已经在你的类路径中)

0 投票
1 回答
8067 浏览

java - 如何使用“ldc_w”避免“常量池中的非法类型”“在茉莉花?

我正在编写一个生成 Jasmin 代码的编译器,并希望调用一个将 Class 作为参数的方法。

所以在 Jasmin 中,我认为应该是:

当我组装并运行它时,我得到:

线程“main”中的异常 java.lang.VerifyError: (class: CTest2, method: main signature: ([Ljava/lang/String;)V) 常量池中的非法类型

使用“javap -c -verbose”查看 CTest.class(Java 版本)和 CTest2.class(Jasmin 版本)的反汇编代码,它们似乎都以相同的方式设置常量池:

我已经修复了 Jasmin 中的两个错误,但是当将类放入“ldc_w”的常量池中时,我看不出它做错了什么,它将类放入常量池中以获取其他指令,例如“new”和“anewarray” “正确。

我尝试在 ASM 中使用 TraceClassVisitor 查看 .class 文件,但它不会转储常量池。

有什么想法我可以尝试下一步吗?

0 投票
0 回答
457 浏览

jvm - Jasmin 的 Soot 版本无法组装 Jasmin 程序集文件

我有来自 Jasmin SourceForge 的 Jasmin 2.4 版本和来自 Soot 项目的 Jasmin 2.4 版本(在 sable.mcgill.ca,标记为“jasminclasses”),而 Soot 版本(我需要)似乎不是好好工作。

我制作了一个简单的编译器,它最初编译为 Jasmin JVM 程序集,然后使用 Jasmin 组装成 JVM 类文件。我曾经使用 Jasmin 的 SourceForge 网站上的普通版 Jasmin,它运行良好;一切编译并正确运行。现在我已经开始使用 Soot 框架进行优化,只要我不尝试将优化后的代码转换回类文件,所有这些都很好。

由于我现在在使用Soot,所以我必须使用Soot 的Jasmin 版本,它支持Soot 使用的JasminOutputStream。Soot 的 Jasmin 版本似乎仍然应该能够以“老式”方式处理 Jasmin 文件,读取“.j”文件而不是采用输入流,但是当我尝试时(对于初始组装优化前),Soot版本失败。

如果我做

我按预期得到输出“生成:MyClass.class”。

如果我这样做(其中 jasminclasses 是 Jasmin 的烟灰版本)

我得到输出

第 5 行只是 .field public n I 它没有任何不妥之处,如上所示,它与 Jasmin 的普通版本编译得很好。

为了完整起见,这里有更多关于这一点的代码:

那里的一切都很好,并且与普通的 Jasmin 组装得很好。

有谁知道 Jasmin 的 Soot 版本是否需要不同的语法?与大多数关于 Soot 和 Jasmin 的内容一样,网络上根本没有太多内容,更不用说我正在搜索的内容了,所以我的谷歌搜索结果并不多。

提前感谢您提供的任何帮助,我真的很沮丧。我的下一步是调试 Soot 的 Jasmin 包,看看它在那里做了什么以及为什么它失败了,但我希望我现在不必为此走那么远。

0 投票
1 回答
8572 浏览

java - 'main'方法中的JVM指令ALOAD_0指向'args'而不是'this'?

我正在尝试为学术研究实现 Java 的一个子集。好吧,我正处于最后阶段(代码生成),我编写了一个相当简单的程序来查看如何处理方法参数:

然后我构建它,并通过我在以下位置找到的在线反汇编程序运行“Main.class”: http ://www.cs.cornell.edu/People/egs/kimera/disassembler.html

我得到了“main”方法的以下实现:(反汇编的输出在 Jasmin 中)

我的问题是:
1.aload_0应该将'this'推到堆栈上(这就是JVM规范似乎所说的)
2.arraylength应该返回其引用位于堆栈顶部的数组的长度

所以根据我的说法,1 和 2 的组合甚至不应该工作。

它如何/为什么起作用?还是反汇编程序有问题,实际的字节码是别的?

0 投票
1 回答
1208 浏览

java - 使用jsr指令的Java递归

我正在使用 Jasmin Java 汇编器来编译玩具语言。但是,当我使用 jsr 指令递归回子程序并使用 java 运行 Jasmin 的输出时,我收到错误“递归调用 jsr 条目”。这是 Jasmin 代码(它正在计算 5!(我省略了类定义;所有这些都在 main 方法体中)):

0 投票
1 回答
1653 浏览

java - Jasmin IDE 插件或编辑器

我有一个.class需要编辑的文件,Jasmin将是一种可行的方法。我找到了Jasclipse插件,但它显然太旧了,我无法将它安装到较新的 Eclipse IDE 中。

你知道.class用 Jasmin 代码编辑文件的好方法吗?或者知道 Netbeans 或 Eclipse 或 IntelliJ 的插件可以做同样的事情吗?

提前感谢您的洞察力。

0 投票
1 回答
3659 浏览

java - Jasmin HelloWorld 示例失败

我在从 jasmin-2.4 发行版执行新编译的 HelloWorld.j 时遇到问题。

我下载了 jasmin-2.4。我可以编译使用:

java -jar jasmin.jar 示例\HelloWorld.j

输出是:

生成:NoJad\j.class

当我执行新编译的程序时:

java NoJad.j

抛出异常:

线程“主”java.lang.VerifyError 中的异常:(类:NoJad/j,方法:主签名:([Ljava/lang/String;)V)期望在堆栈上找到对象/数组找不到主类: NoJad.j。程序将会退出。

我倾向于认为这是 HelloWorld.j 示例中的一个错误。也许一个新的验证者发现了一个错误???

注意 1:发行版中预编译的 HelloWorld.class 按预期工作。

注 2:我正在使用这个版本的 java java 版本“1.6.0_24”Java(TM) SE Runtime Environment (build 1.6.0_24-b07) Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed模式)

这是发行版中的 HelloWorld.j 文件:

0 投票
2 回答
301 浏览

java - 是否可以将 JVM 的汇编语言集成到标准的高级 Java 代码中?

我正在尝试将 Java 汇编代码(使用 Jasmin(Java 中的汇编器接口))与标准 Java 代码合并。像这样

这可能吗?

0 投票
1 回答
357 浏览

java - 如何在 Jasmin 中创建数据池?

Jasmin 是否有能力指定一个常量池?我需要能够创建数千字节的描述符区域。该区域将包含任意字节数据,包括空值。以下是声明二进制常量的典型汇编指令示例:

似乎 Java 类文件包含这些区域,但我无法在 Jasmin 中找到一种方法来声明如此大规模的值。

0 投票
2 回答
4320 浏览

java - Jasmin 汇编程序验证错误:期望在堆栈上找到对象/数组

在“java testphase”之后出现此错误:

代码: