2009-11-17 85 views
3

在閱讀Java安全性時,我遇到了下面的句子,但無法在Internet上得到任何令人滿意的解釋。任何人都可以請解釋什麼是ILLegal字節碼?

  • 類可以防止在加載字節碼
  • 的防止裝載非法包

回答

3

但是,我們不能確定類本身是否安全。 SecurityManager的安全網仍然會阻止該類訪問網絡和本地硬盤等受保護的資源,但這本身還不夠。該類可能包含非法字節碼,僞造指向受保護內存的指針,溢出或下溢程序堆棧,或以某種其他方式破壞JVM的完整性。檢查主題的類文件驗證在[1]:http://medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm

+0

該鏈接非常有用。 – Geek 2009-11-17 07:08:50

0

源代碼被編譯成字節碼,這是分發給用戶。如果字節碼已經被破壞,或者不是由java編譯器創建的,那麼它可能是非法的,這意味着字節沒有意義。

2

byte code verifier使下列檢查:

  • 分行必須是碼陣列的方法的範圍內。
  • 所有控制流程指令的目標都是指令的開始。在寬指令的情況下,寬操作碼被認爲是指令的開始,並且由該寬指令修改操作的操作碼不被視爲開始指令。分支到指令的中間是不允許的。
  • 沒有指令可以訪問或修改大於或等於其方法指示分配的局部變量數的索引處的局部變量。
  • 所有對常量池的引用都必須是相應類型的條目。例如:指令ldc只能用於int或float類型的數據或類String的實例; getfield指令必須引用一個字段。
  • 代碼不會在指令中間結束。
  • 執行不能脫離代碼的末尾。
  • 對於每個異常處理程序,由處理程序保護的代碼的起點和終點必須位於指令的開始位置,或者在終點處立即位於代碼的末尾。起點必須在結束點之前。 - 異常處理程序代碼必須從有效指令開始,並且它可能不會從寬指令修改的操作碼開始。