我正在尝试修改每当按下F时都会将“重力引擎关闭/打开”的minecraft mod(重力套装),但是我想更改此字符串,因此我开始将“重力引擎关闭”替换为“重力引擎已关闭”通过使用十六进制编辑器,但此后该文件不再有效:/我试图使用jbe和cjbe和rej之类的工具,并且该字符串在常量池中,但是它只会让我删除它...

有什么办法可以在不破坏已编译的Java类的情况下更改其字符串?

谢谢

最佳答案

我稍作调整就两次编译了相同的类,首先使用“foo”,然后使用“foo-bar”

public class HelloWorld {
   public static final String HELLO = "foo-bar";
}

用“foo”
000000b0  74 01 00 **03** 66 6f 6f 00  21 00 02 00 03 00 00 00  |t...foo.!.......|
000000c0  01 00 19 00 04 00 05 00  01 00 06 00 00 00 02 00  |................|
000000d0  07 00 01 00 01 00 08 00  09 00 01 00 0a 00 00 00  |................|
000000e0  1d 00 01 00 01 00 00 00  05 2a b7 00 01 b1 00 00  |.........*......|
000000f0  00 01 00 0b 00 00 00 06  00 01 00 00 00 01 00 01  |................|
00000100  00 0c 00 00 00 02 00 0d                           |........|

与“foo-bar”
000000b0  74 01 00 **07** 66 6f 6f 2d  62 61 72 00 21 00 02 00  |t...foo-bar.!...|
000000c0  03 00 00 00 01 00 19 00  04 00 05 00 01 00 06 00  |................|
000000d0  00 00 02 00 07 00 01 00  01 00 08 00 09 00 01 00  |................|
000000e0  0a 00 00 00 1d 00 01 00  01 00 00 00 05 2a b7 00  |.............*..|
000000f0  01 b1 00 00 00 01 00 0b  00 00 00 06 00 01 00 00  |................|
00000100  00 01 00 01 00 0c 00 00  00 02 00 0d              |............|

似乎长度也在结构中编码。注意3和7。有more information on this structure

如果字符串为300个字符,则前两个字节为01 2c。

因此,假设“重力引擎已关闭”的长度为29个字符,我将确保您在将字符串更改为1D之前立即将字节更改为当前字节(目前应为19个字符(“重力引擎OFF/ON”为25个字符))

09-30 17:04
查看更多