java字节码。。将icosnt_u替换为bipush<&燃气轮机;
我试图理解为什么当我用bipush 20(1014)替换iconst_5(08)时,它不会工作。在这种情况下,是否可以将-1以外的整数设置为5java字节码。。将icosnt_u替换为bipush<&燃气轮机;,java,bytecode,Java,Bytecode,我试图理解为什么当我用bipush 20(1014)替换iconst_5(08)时,它不会工作。在这种情况下,是否可以将-1以外的整数设置为5 A7 00 07 goto pos.00000170 15 0E iload local.0E 08 iconst_5 6C idiv 36 16 istore local.16 2A
A7 00 07 goto pos.00000170
15 0E iload local.0E
08 iconst_5
6C idiv
36 16 istore local.16
2A aload_0
2B iload_1
15 16 iload local.16
B7 00 E9 invokespecial void hui.surf.I.V.A(java.io.PrintWriter, int)
84 0F 01 iinc local.0F, 1
以下是反编译的代码段:
enter code here
{
i6 = paramBoolean1 ? i4 / 2 : i4 / 5;
A(paramPrintWriter, i6);
}
我需要将整数5替换为20
如果我将08替换为10 14,则编辑器会这样做:
A7 00 07 goto pos.00000170
15 0E iload local.0E
10 14 bipush 20
36 16 istore local.16
2A aload_0
2B aload_1
15 16 iload local.16
B7 00 E9 invokespecial void hui.surf.I.V.A(java.io.PrintWriter, int)
84 0F 01 iinc local.0F, 1
A7 FE F3 goto pos.0000006F
这就是反编译代码的样子:(JDgui反编译器)
这里的问题是指令大小不同,因此更改它将打乱所有分支偏移
如果使用Krakatau,它将用标签替换所有数字偏移,从而更容易编辑。(披露:我写的)。从评论来看,ReJ似乎也能起作用。大多数工具都会这样做,因为这是汇编程序的常见行为。很明显,较大的指令占用更多空间,因此会打乱跨代码区域的任何分支(如顶部的goto)。是否可以在字节码上插入新行。。。我正在使用dirtyJoe。。。它不插入新行,只编辑现有行。我对“dirtyJoe”一无所知。它的独立cpp是由字节码编辑器编写的。。您可以编辑并保存。类您是否尝试将指令的十六进制值设置为
10 14
(两个字节值之间有空格)?你确定不能直接在第三列中输入“bipush 20”吗?谢谢:)我确实浏览过github,但是你有下载链接吗,是独立用户界面吗?听起来这是最新的工具了。。读一下自述。。。mmm学习曲线。。。我也许值得用它。。需要时间。。更喜欢gui:)谢谢!很抱歉喀拉喀托有一点是不友好的。
{
i6 = paramBoolean1 ? i4 / 2 : 20;
A(paramPrintWriter, i6);
}