ROSE 編譯器框架/ROSE API
此頁面的目標是收集有關重構 ROSE API 的討論
原始版本是直接從 ROSE 開發人員指南的 1.22 ROSE API 重構中複製和貼上的
這是 API 的概述,將 API 函式新增到下一節。這是一個新的高階 ROSE API 的草案設計,其中將位於呼叫分析、轉換和預期使用者級 ROSE 工具支援的機制的高階函式介面。這種支援目前在 ROSE 中四處分佈,這個 API 將對其進行集中,並使 ROSE 對使用者更加清晰。有四個級別
從原始碼或二進位制可執行檔案生成抽象語法樹 (AST)。AST 儲存輸入軟體的結構表示。
基於 ROSE 的工具的分析和轉換支援。
這將包括過程內分析、過程間分析和全程式分析(克服了單獨編譯的問題)。此分析可以處理原始碼分析、二進位制分析或兩者。原始碼上的程式分析包括
原始碼上的程式分析包括
- 呼叫圖分析
- 類層次結構分析
- 控制流分析
- 定義-使用分析
- 支配分析
- 支配樹和支配邊界分析(舊的)
- 開放分析的連線(舊的)
- 指標分析
- 過程切片(舊的;未使用)
- 副作用分析
- 值傳播分析
- 靜態過程間切片(替換過程切片)
- 活躍性分析
- 依賴性分析
- AST 直譯器(使用 AST 解釋具體語義)
二進位制檔案上的程式分析包括
- 呼叫圖分析
- 控制流分析
- 常量傳播
- 資料流分析
- 指令語義
- 庫識別(FLIRT)
- Dwarf 除錯格式
- 二進位制檔案格式的分析
AST 的修改可以組織為:i. Instrumentation
ii. 最佳化這些包括與科學應用程式的一般效能最佳化相關的最佳化範圍。
- 內聯
- 迴圈最佳化:融合、裂變、展開、塊化、迴圈交換、陣列複製等。
- 常量摺疊
- 有限差分
- 部分冗餘消除
iii. 一般轉換這些包括概述,
- 概述
- 隱式程式碼生成:這項工作使 C++ 隱式語義對於 C 風格的分析明確。
- 函式呼叫規範化:這是一個函式呼叫規範化庫,用於支援二進位制分析。
- AST 複製支援:此支援允許透過單個函式複製任意子樹(或整個 AST),並控制
深層或淺層複製。
- AST 合併支援:這項工作允許合併單獨的 AST,並共享它們的相同名稱
語言宣告以支援全程式分析。合併的 AST 中的重複部分將被刪除。
- 靜態二進位制重寫二進位制可執行檔案上可以進行一組受限的轉換,本節詳細介紹
這項工作。
ROSE 提供了許多不同的技術來定義 AST 的遍歷以及從 AST 形成的關聯圖的遍歷。
後端包含用於從 AST 生成程式碼(反解析)以及可選地呼叫後端編譯器的函式。ROSE 包含許多特定於程式碼生成階段的功能
- 從 AST 的任意子樹生成程式碼
使用者可以從 AST 的子集生成程式碼,作為對自定義程式碼生成的支援。
- 使用生成的程式碼生成任意測試
本節包含在程式碼生成階段輸出任意文字的支援。例如,它對於生成針對專用 GPU 工具等的程式碼很有用。
- 程式碼生成格式控制
在生成的程式碼格式方面,可以進行一些控制。
基於 ROSE 的工具的有用實用程式函式。
- AST 視覺化
AST 對視覺化的支援包括作為 PDF、DOT 和整個圖的更彩色表示(包括 AST 以及型別屬性(通常不作為 AST 的一部分))的表示。這項工作包括對 dot2gml 翻譯的支援(在 roseIndependentSupport/dot2gml 中)。這可能是放置到可能的 OGDF(開放圖形繪製框架)的介面的地方。
- AST 查詢
AST 查詢機制是一種簡單的方法,用於獲取 IR 節點的列表。它通常用於分析或轉換中。
- AST 一致性測試
一致性測試驗證 AST 是否正確形成。請注意,這不是一個測試,即生成的程式碼是合法的程式碼。
- 效能監控
本節提供支援來衡量基於 ROSE 的工具的空間和時間複雜度。
- AST 後處理
AST 後處理是在使用者修改後用於修復 AST 以輸出正確形成的 AST 的步驟。並非所有對 AST 的修改都可以透過此步驟進行更正。
- AST 檔案 I/O 支援
本節包含對將 AST 寫入檔案和從檔案中讀取 AST 的支援。使用二進位制檔案 I/O,它旨在在空間和時間上都具有良好的效能。
- 語言特定名稱支援
本節包含對為語言構造生成唯一名稱以及處理混淆和未混淆名稱以在基於 ROSE 的工具中使用的支援。
- 對註釋和 CPP 指令的支援
本節包含對在 AST 中讀取和寫入註釋和 CPP 指令的支援。
- GUI 支援
本節包含對使用 ROSE 構建基於 GUI 的工具的支援。
- 二進位制分析與 IDA PRO 的連線
本節包含對將 IDA Pro 與 ROSE 結合使用以進行二進位制分析的支援。
- 資料庫支援
本節包含對構建使用 SQLite 資料庫的工具的支援。
- 圖和圖分析
本節包含對構建自定義圖以表示靜態和動態分析以及圖分析演算法以支援對這些圖的分析的支援。
- 效能指標註釋
本節包含對動態派生的資訊寫入 AST 的支援(效能資訊以支援分析和最佳化工具)。
- 抽象控制代碼
本節包含對在原始碼中構建抽象控制代碼的支援。這項工作用於自動調整以及其他將原始碼引用作為介面的一部分傳遞的工具。
- 宏重包裝器
這目前在 ROSE/projects 目錄中,也許應該成為 ROSE API 的一部分。
- 命令列處理支援
這是 ROSE 內部使用的命令列處理,並使其可用,以便使用者可以處理特定於其基於 ROSE 的工具的命令列。
- 通用字串支援
這些函式支援 ROSE 內部使用的字串的常見操作,對基於 ROSE 的工具很有用。
- 常見檔案和路徑支援
這是一組對處理基於 ROSE 的工具中的目錄結構有用的函式。
- 其他支援
使用資訊輸出、ROSE 版本號支援等。