日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java程序一写文件就崩溃_为什么直接修改java的.class文件会导致程序崩溃

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java程序一写文件就崩溃_为什么直接修改java的.class文件会导致程序崩溃 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

是這樣的。

有一次,hardcode了ip地址在代碼里,由于懶得重新編譯。

強行用記事本打開.class文件,發現里面已經面目全非了,但是數字還是原來的樣子。

于是直接改了.class文件里的數字,換了個ip地址,結果運行時是直接崩潰的。

為什么呢?是有什么檢查機制嗎?

-------補充--------------

不好意思 描述不太準確啊

補充個例子

1)我先新建了一個.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

運行java Test

結果正常

輸出 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文件中明顯有一串數字,直接修改之。

然后再運行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)

為什么修改個數字就會崩潰呢?

總結

以上是生活随笔為你收集整理的java程序一写文件就崩溃_为什么直接修改java的.class文件会导致程序崩溃的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。