如何使用java字节码将长按到堆栈?

时间:2014-04-21 22:19:57

标签: java bytecode

aload_0
    aload_0
    sipush 2377
    invokespecial game/engine/serverHook createGameServerSocket (I)Ljava/net/Socket;

大家好,我上面有这段代码。任何人都可以告诉我如何将长值加载到堆栈而不是sipush支持的值?我认为它支持32768 +/-

我需要比这个更高的数字,但我不知道如何使用长值或任何大于此的值。

感谢任何帮助。

sipush 2377<是套接字的端口,我需要改变它。

是的,我确实需要使用字节码。

1 个答案:

答案 0 :(得分:0)

编辑,你真正想要的是一个int,而不是一个短。为此,请使用ldcldc_w指令。 (Ldc仅适用于最大255的常量池索引。如有疑问,请使用ldc_w,因为它始终有效)

要将常量长按到堆栈上,您需要使用ldc2_w指令。但是,由于您尝试调用的功能不会花费很长时间,因此无效。

实施例。这使用Krakatau汇编语法。我相信它也适用于Jasmin。

aload_0
aload_0
ldc_w 2377
invokespecial game/engine/serverHook createGameServerSocket (I)Ljava/net/Socket;