Opal是一個可擴展的庫,用於分析和工程Java字節碼。 Opal完全用Scala編寫,並利用Scala的高級語言功能提供了一種新的且以前看不見的靈活性和易用性。蛋白石是從頭開始設計的,考慮到可擴展性,適應性和可擴展性(記憶和性能方面)。蛋白石的許多部分已經平行,要么提供必要的基礎架構來實現高度並發分析,要么至少是線程安全的。
蛋白石由幾個項目組成:
常見(蛋白石/公共):包含一般有用的功能,數據結構(例如,三emaps)和圖算法(例如,計算強烈連接的組件,計算統治者信息等)在分析(字節)代碼時有用。
靜態分析基礎架構(OPAL/SI):包含一個基於晶格的框架,用於實現模塊化靜態分析。
字節碼基礎架構(OPAL/BI):解析Java 1.0 -Java 16字節碼的必要基礎結構。
字節碼拆卸器(OPAL/DA):Java字節碼拆卸器,提供類文件的一對一表示,可用於創建Java類文件的可讀HTML表示。
字節碼創建器(OPAL/BC):工程師Java字節碼的大多數基礎基礎結構。
字節碼表示(OPAL/BR):OPAL的Java字節碼的基本表示。實現所有功能以對Java類文件進行基本分析。
抽象解釋框架(OPAL/AI):基於抽象解釋的框架的實現,可用於輕鬆以不同級別的精度實施分析。
三個地址代碼(OPAL/TAC):提供兩個基於3個編碼的中間表示。直接基於字節碼直接創建的天真,以及使用基本的抽象解釋的結果直接提供CFG以及Def-use信息的更高級別的SSA狀表示。
依賴項提取(OPAL/DE):為提取和分析項目源代碼依賴項提供支持。該項目是項目的基礎,例如檢查體系結構。
體系結構驗證(OPAL/AV):一個針對指定的架構檢查項目實現的體系結構的小框架。
框架(蛋白石/框架):基本上只是匯總了所有子項目,以便輕鬆獲得所有子項目的一致快照。通常,建議在要使用蛋白石時聲明對該項目的依賴。
演示(蛋白石/演示):包含演示如何使用蛋白石的工作代碼樣本。演示項目中的代碼主要是作為教學資源。要啟動示例,請啟動sbt控制台(Scala構建工具),然後將當前項目更改為“演示”( project Demos )。之後,您可以run幾個小型演示分析。
愛馬仕(蛋白石/工具/愛馬仕):針對項目集運行各種代碼查詢的框架。
BugPicker (Opal/Tools/bp):在源代碼中查找control-/DATA-FLOW問題的工具。確定的問題範圍從無用的防禦檢查到導致(未手持)運行時異常的錯誤。
OPAL還提供了越來越多的工具,這些工具旨在幫助開發人員熟悉Java字節碼和/或OPAL。這些項目位於文件夾DEVELOPING_OPAL/tools中,可以使用SBT控制台運行。
以下內容適用於“主/開發”分支。
Opal使用SBT作為其構建工具,使用SBT控制台使用OPAL特別容易。確保您的Java 8至少更新171,Scala 2.12.13和SBT 1.4.6已安裝和運行,並且SBT至少可以使用4GB RAM(-XMX4G)。下載最近的蛋白石或克隆存儲庫的快照。轉到Opal的根文件夾。
sbt cleanBuild 。這將編譯所有核心項目(包括測試),生成項目範圍的Scaladoc文檔,並將項目發布給您的本地IVY目錄。local.sbt文件,並指定兩個系統屬性( JAVA_OPTS ): -Dorg.opalj.threads.CPUBoundTasks=8 -Dorg.opalj.threads.IOBoundTasks=24將值的值設置為適當的值IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" )。您還可以通過鍵入使用SBT時設置這些屬性:eval sys.props("org.opalj.threads.CPUBoundTasks") = "1" 。sbt test以運行單元測試,並測試一切都按預期工作。請注意,某些測試會產生一些其他(彩色)輸出。但是,只要所有測試成功而沒有錯誤,一切都可以。如果sbt test失敗,則可能是由於內存不足所致。在這種情況下,有必要以更多的內存啟動SBT本身。sbt it:test以運行集成測試套件。執行此測試套件可能需要很長時間(在具有32GB和8個內核的快速桌面上,需要〜2H)。你準備出發了。
故障排除
當您在構建蛋白石方面遇到問題時,請考慮以下選項。
要開始,請訪問項目網頁。此外, Demos項目中的代碼包含許多簡短(ER)示例,這些示例演示瞭如何解決常規任務。大多數示例可以直接執行。
啟動SBT控制台。 (在命令行上的Opal的根文件夾呼叫sbt中。)使用命令project Demos演示將項目更改為演示,然後run類型以運行其中一個演示。