在我的字節碼檢測項目中,我經常在VerifyErrors上偶然發現。但是,默認的java驗證程序幾乎沒有提供關於哪條指令導致錯誤的信息(它只給出方法和一條小信息)。是否有任何獨立的字節碼驗證器,它提供了更高級的幫助來定位錯誤,至少是精確的指令位置?謝謝。獨立字節碼驗證程序
7
A
回答
2
2
ASM CheckClassAdaptor.verify()給出了很好的意見: http://asm.ow2.org/
2
我也一直在尋找的東西,會報告潛在的驗證錯誤,尤其是IncompatibleClassChangeError
秒。我用一個API類和另一個調用API方法的客戶端類寫了一個小測試項目,再加上一個運行驗證器的主類;然後更改API,重新編譯它,但不是客戶端,並檢查瞭解可能被捕獲的內容。目前使用的是-target 7
,雖然沒有特別的JDK 7功能。
首先,也是最明顯的,Class.forName
可以在客戶端類的簽名一定的誤差,但它似乎並沒有檢查方法機構將呼叫不存在API方法等,即使你打電話getDeclaredMethods
;只有在有問題的代碼行實際運行時,虛擬機纔會報告錯誤。
在BCEL 5.2中的JustIce似乎是最簡單的;
org.apache.bcel.verifier.Verifier.main(new String[] {clazz});
這項工作:
Pass 3a, method number 1 ['public void m()']:
VERIFIED_REJECTED
Instruction invokestatic[184](3) 4 constraint violated:
Referenced method 'x' with expected signature '()V' not found in class 'API'.
....
我試過ASM 4.0,但
org.objectweb.asm.util.CheckClassAdapter.main(new String[] {clazz});
不工作;也許它會檢查方法的格式,但不能鏈接。內嵌main
並通過checkDataFlow=true
沒有幫助。
搜索,我也發現https://kenai.com/hg/maxine~maxine/file/8429d3ebc036/com.oracle.max.vm/test/test/com/sun/max/vm/verifier/CommandLineVerifier.java,但我找不到任何方式使這項工作;運行時伴隨的單元測試會拋出ClassNotFoundException
。
相關問題
- 1. 獨立程序
- 2. 作爲獨立應用程序的角度驗證邏輯
- 3. 從獨立應用程序驗證用戶serverside
- 4. 獨立Web應用程序的身份驗證系統要求
- 5. 在java web start應用程序中禁用字節碼驗證
- 6. C++如何讀取字節爲整數字節序獨立?
- 7. 在獨立的非Laravel應用程序中照亮驗證程序
- 8. 獨立java程序解密密碼
- 9. os獨立應用程序代碼
- 10. 創建獨立節點js應用程序安裝程序
- 11. 驗證Java平臺獨立性
- 12. 獨立驗證的會話和地區
- 13. 獨立表單驗證與流星
- 14. 在執行獨立程序時更新Matlab獨立程序
- 15. Symfony 2獨特的驗證程序
- 16. 密碼驗證程序Java
- 17. Python密碼驗證程序
- 18. 密碼驗證程序
- 19. C#代碼驗證程序
- 20. JVM字節碼驗證器的職責
- 21. Yodlee getMFAResponse驗證碼字節數組
- 22. jQuery驗證獨立元素共享一個驗證測試
- 23. AngularJS:嘗試立即驗證的自定義驗證程序
- 24. Izpack字段驗證程序
- 25. 字段驗證程序
- 26. Codeigniter - 匿名驗證規則,獨立於任何字段
- 27. Android:獨立線程與獨立應用程序
- 28. 獨立Python應用程序
- 29. Java獨立代理程序
- 30. 獨立Web應用程序
爲什麼我沒有想到這一點。我實際上使用BCEL,但它從來沒有發生過我檢查它的驗證器。它實際上有一個叫JustIce。 – 2010-02-26 09:45:51