2

我可以像这样在 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 。)

4

2 回答 2

2

我以前也遇到过这个问题。L保留用于文字对象名称,不能用于打印 longs。但是,J可用于打印长(64 位)值。

因此,您的代码将是:

getstatic java/lang/System/out Ljava/io/PrintStream; ldc2_w 7 invokevirtual java/io/PrintStream/println(J)V

于 2014-10-13T02:41:29.763 回答
2

您可以使用l2i打印小的长(64 位)值,但这可能会导致您丢失符号位和附加信息。你应该使用

invokevirtual java/io/PrintStream/println(J)V

于 2014-10-13T02:45:19.917 回答