轻微版本的Jasmin无法组装Jasmin程序集文件

时间:2010-11-28 02:10:53

标签: jvm jasmin soot

我有来自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版本失败了。

如果我这样做

java -cp jasmin.jar jasmin.Main MyClass.j

我按预期输出“Generated:MyClass.class”。

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

java -cp jasminclasses-2.4.0.jar jasmin.Main MyClass.j

我得到输出

MyClass.j:5: Warning - Syntax error.
.field public n
                ^
MyClass.j:5: Error - Couldn't repair and continue parse.
.field public n
                ^
MyClass.j: Found 2 errors`

第5行就是     .field public n I 没有什么不正确的,如上所示,它与正常版本的Jasmin编译得很好。

为了完整起见,这里还有一些代码:

.source MyClass.j
.class public MyClass
.super AnotherClass

.field public n I

.method public <init>()V
 aload_0
 invokenonvirtual AnotherClass/<init>()V
 return
.end method

那里的一切都很好,并且正常的Jasmin装配好。

有人知道Jasmin的Soot版本是否需要不同的语法?与大多数关于Soot和Jasmin的东西一样,首先在网络上并没有太多,更不用说我正在寻找的东西了,所以我的谷歌搜索没有太多。

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

0 个答案:

没有答案