Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jasmin黑客攻击和验证错误_Java_Verifyerror_Jasmin - Fatal编程技术网

Java jasmin黑客攻击和验证错误

Java jasmin黑客攻击和验证错误,java,verifyerror,jasmin,Java,Verifyerror,Jasmin,我正在玩jasmin,我尝试启动我的.class文件,它应该执行简单的字符串连接。我的茉莉花来源如下: .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 st

我正在玩jasmin,我尝试启动我的.class文件,它应该执行简单的字符串连接。我的茉莉花来源如下:

.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,并获得默认的_class.class。但是,当我尝试像java default_类一样启动它时,我得到一个错误:

Exception in thread "main" java.lang.VerifyError: (class: default_class, method: main_65428301 signature: ()I) Illegal use of nonvirtual function call

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

我也认为没有理由这样做:

new java/lang/String
dup


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

我尝试模拟eclipse在类似情况下的操作,但感谢您指出这一点。无论如何,我想知道调用第二个类似main的方法有什么问题,因为这就是错误消息suggest@k_wisniewski,在我看来,它指的是
invokespecial java/lang/StringBuilder(Ljava/lang/String;)V
,它位于
(类:default_类,方法:main_65428301签名:()I)
OK,我现在解决了这个问题
invokestatic java/lang/String.valueOf(Ljava/lang/Object;)Ljava/lang/String;