java程序一写文件就崩溃_为什么直接修改java的.class文件会导致程序崩溃
是這樣的。
有一次,hardcode了ip地址在代碼里,由于懶得重新編譯。
強(qiáng)行用記事本打開(kāi).class文件,發(fā)現(xiàn)里面已經(jīng)面目全非了,但是數(shù)字還是原來(lái)的樣子。
于是直接改了.class文件里的數(shù)字,換了個(gè)ip地址,結(jié)果運(yùn)行時(shí)是直接崩潰的。
為什么呢?是有什么檢查機(jī)制嗎?
-------補(bǔ)充--------------
不好意思 描述不太準(zhǔn)確啊
補(bǔ)充個(gè)例子
1)我先新建了一個(gè).java
public class Test {
public Test() {
}
public static void main(String[] args) {
String ip = "172.18.81.111";
System.out.println(ip);
}
}
然后
javac Test.java
運(yùn)行java Test
結(jié)果正常
輸出 172.18.81.111
2)然后我用vim修改.class文件
êto?^@^@^@4^@^]
^@^F^@^O^H^@^P ^@^Q^@^R
^@^S^@^T^G^@^U^G^@^V^A^@^F^A^@^C()V^A^@^DCode^A^@^OLineNumberTable^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@
SourceFile^A^@ Test.java^L^@^G^@^H^A^@^M172.18.81.111^G^@^W^L^@^X^@^Y^G^@^Z^L^@^[^@^\^A^@^DTest^A^@^Pjava/lang/Object^A^@^Pjava/lang/System^A^@^Cout^A^@^ULjava/io/PrintStream;^A^@^Sjava/io/PrintStream^A^@^Gprintln^A^@^U(Ljava/lang/String;)V^@!^@^E^@^F^@^@^@^@^@^B^@^A^@^G^@^H^@^A^@ ^@^@^@^]^@^A^@^A^@^@^@^E*·^@^A±^@^@^@^A^@
^@^@^@^F^@^A^@^@^@^D^@ ^@^K^@^L^@^A^@ ^@^@^@+^@^B^@^B^@^@^@^K^R^BL2^@^C+?^@^D±^@^@^@^A^@
^@^@^@^N^@^C^@^@^@^H^@^C^@
^@
^@^K^@^A^@^M^@^@^@^B^@^N
~
~
上面的.class文件中明顯有一串?dāng)?shù)字,直接修改之。
然后再運(yùn)行java Test
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ClassFormatError: Unknown constant tag 49 in class file Test
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
為什么修改個(gè)數(shù)字就會(huì)崩潰呢?
總結(jié)
以上是生活随笔為你收集整理的java程序一写文件就崩溃_为什么直接修改java的.class文件会导致程序崩溃的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 彻底没救了!《Forspoken》发售2
- 下一篇: mysql 自增语句_Mysql 自动增