我正在尝试修改每当按下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个字符))