首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jasmin破解和验证错误

jasmin破解和验证错误
EN

Stack Overflow用户
提问于 2013-01-05 21:46:26
回答 2查看 924关注 0票数 2

我正在使用jasmin,并尝试启动我的.class文件,该文件应该执行简单的字符串连接。我的jasmin源码如下所示:

代码语言:javascript
复制
.class public default_class
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit locals 1
.limit stack 1
invokestatic main_65428301()I
return
.end method
.method public static main_65428301()I
.limit locals 1
.limit stack 100
new java/lang/String
dup
ldc "foo"
invokestatic java/lang/String.valueOf(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java/lang/StringBuilder(Ljava/lang/String;)V
ldc "bar"
invokevirtual java/lang/StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java/lang/String.toString()V
astore_0
iconst_0
ireturn
.end method

现在我可以运行java -jar jasmin.jar了,我得到了default_class.class。然而,当我尝试像java default_class一样启动它时,我得到了一个错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.VerifyError: (class: default_class, method: main_65428301 signature: ()I) Illegal use of nonvirtual function call

我应该在我的程序集中进行哪些更改才能使其正常工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-05 22:05:08

在JVM中,要创建对象,必须先使用new指令,然后调用<init>方法(构造函数)。您不会创建new StringBuilder并调用错误的构造函数名称(应该是java/lang/StringBuilder/<init>(Ljava/lang/String;)V)。

我也看不出有什么理由这样做:

代码语言:javascript
复制
new java/lang/String
dup

代码语言:javascript
复制
invokestatic java/lang/String.valueOf(Ljava/lang/Object;)Ljava/lang/String;
票数 1
EN

Stack Overflow用户

发布于 2013-01-05 22:06:07

“新指令不会完全创建新实例;在未初始化的实例上调用实例初始化方法之前,实例初始化不会完成。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14172352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档