3
A
回答
3
但是,我們不能確定類本身是否安全。 SecurityManager的安全網仍然會阻止該類訪問網絡和本地硬盤等受保護的資源,但這本身還不夠。該類可能包含非法字節碼,僞造指向受保護內存的指針,溢出或下溢程序堆棧,或以某種其他方式破壞JVM的完整性。檢查主題的類文件驗證在[1]:http://medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm
0
源代碼被編譯成字節碼,這是分發給用戶。如果字節碼已經被破壞,或者不是由java編譯器創建的,那麼它可能是非法的,這意味着字節沒有意義。
2
的byte code verifier使下列檢查:
- 分行必須是碼陣列的方法的範圍內。
- 所有控制流程指令的目標都是指令的開始。在寬指令的情況下,寬操作碼被認爲是指令的開始,並且由該寬指令修改操作的操作碼不被視爲開始指令。分支到指令的中間是不允許的。
- 沒有指令可以訪問或修改大於或等於其方法指示分配的局部變量數的索引處的局部變量。
- 所有對常量池的引用都必須是相應類型的條目。例如:指令ldc只能用於int或float類型的數據或類String的實例; getfield指令必須引用一個字段。
- 代碼不會在指令中間結束。
- 執行不能脫離代碼的末尾。
- 對於每個異常處理程序,由處理程序保護的代碼的起點和終點必須位於指令的開始位置,或者在終點處立即位於代碼的末尾。起點必須在結束點之前。 - 異常處理程序代碼必須從有效指令開始,並且它可能不會從寬指令修改的操作碼開始。
相關問題
- 1. 字節碼究竟是什麼?
- 2. 什麼是Java字節碼中的#號?
- 3. 什麼是Java字節碼注入?
- 4. 這些字節是什麼?
- 5. 什麼是活字節?
- 6. 爲什麼在此代碼中出現錯誤'Illegal offset type'?
- 7. 爲什麼這個javascript代碼片段觸發「Unexpected token ILLEGAL」?
- 8. 字節碼優於本地代碼的優點是什麼?
- 9. 什麼是多字節字符集?
- 10. 爲什麼MongoId不是12字節長,而是24字節?
- 11. 什麼字節碼庫控制行號?
- 12. 爲什麼setuptools需要寫字節碼?
- 13. 爲什麼Kotlin字節碼引用java.util.function.BiConsumer?
- 14. 什麼是字符編碼?
- 15. 什麼是鍵盤單字節字符代碼和鍵盤雙字節字符代碼
- 16. 用於JVM字節碼的NOP是什麼?
- 17. 剝離的JAR(方法沒有字節碼)是什麼意思?
- 18. 什麼是java字節碼性能getfield vs invokevirtual
- 19. 爲什麼是基於堆棧的字節碼IL
- 20. 爲什麼'a'是對象引用的Java字節碼前綴?
- 21. JVM /字節碼/處理器的斷點究竟是什麼?
- 22. 密碼保護的ZIP文件的字節簽名是什麼?
- 23. 爲什麼類定義總是產生相同的字節碼?
- 24. TCL proc和字節碼編譯 - 鏈接是什麼?
- 25. model.frame,UseMethod和R字節碼引用 - 這是什麼?
- 26. 字節碼操作的危害是什麼(如果有的話)?
- 27. Dalvik字節碼中的「ins」和「outs」是什麼?
- 28. 什麼是「@ +節點」?
- 29. 什麼是AoB(字節數組)
- 30. 什麼是GWT字節緩存文件?
該鏈接非常有用。 – Geek 2009-11-17 07:08:50