我可以像这样在jasmin中打印一个整数:
getstatic java/lang/System/out Ljava/io/PrintStream;
bipush 7
invokevirtual java/io/PrintStream/println(I)V
println
的参数是什么才能打印长(64位整数)?
我试过了
invokevirtual java/io/PrintStream/println(L)V
但汇编程序告诉我(L)V
是非法签名。 (注意:当我尝试调用此方法时,System.out
和long都在堆栈中。)
答案 0 :(得分:2)
我以前也遇到过这个问题。 L
保留用于文字对象名称,不能用于打印长整数。但是,J
可用于打印长(64位)值。
所以,你的代码就是:
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc2_w 7
invokevirtual java/io/PrintStream/println(J)V
答案 1 :(得分:2)
您可以使用l2i
打印小的长(64位)值,但这可能会导致丢失符号位和其他信息。你应该使用
invokevirtual java/io/PrintStream/println(J)V