静的プログラム解析において、SootはJavaの中間言語で構成されるバイトコード操作および最適化フレームワークです。これは、マギル大学の Sable Research Group によって開発されました。Soot は現在、パーダーボルン大学の Secure Software Engineering Group によって保守されています。[1] Soot は、他の解析プログラムがアクセスして構築できるように、 APIを通じて 4 つの中間表現を提供します。[2]
- Baf:バイトコードに近い表現。
- Jimple: ステートメントごとに最大3 つのコンポーネントを持つ Java ソース コードの簡略化されたバージョン。
- Shimple: Jimple のSSAバリエーション ( GIMPLEに類似)。
- Grimp:逆コンパイルとコード検査に適した Jimple の集約バージョン。
現在の Soot ソフトウェア リリースには、コンテキスト依存のフロー非依存のポイントツー分析、[3] コール グラフ分析、支配分析 (「イベント a はイベント b に続く必要があるか?」という質問に答える) など、すぐに使用できる詳細 なプログラム分析も含まれています。また、dava と呼ばれるデコンパイラも含まれています。
Soot はGNU Lesser General Public License (LGPL)の下で利用可能なフリーソフトウェアです。2010 年には、Soot に関する 2 つの研究論文 (Vallée-Rai 他 1999 年、Pominville 他 2000 年) が、425 件のエントリーの中から 12 件の他の論文とともにIBM CASCON First Decade High Impact Papersに選ばれました。 [4]
ジンプル
Jimple は、 Java バイトコードよりも簡単に最適化できるように設計されたJavaプログラムの中間表現です。型指定され、具体的な構文を持ち、3 アドレス コードに基づいています。
Jimpleには15種類の操作しか含まれていないため、フロー解析が簡素化されています。対照的に、Javaバイトコードには200種類以上の操作が含まれています。[5] [6]
Java バイトコードとは異なり、Jimple ではローカル変数とスタック変数が型指定されており、Jimple は本質的に型安全です。
Jimple への変換、または「Jimmplifying」(「simplifying」にちなんで)は、バイトコードを 3 アドレス コードに変換することです。Clark Verbrugge によって最初に研究されたこの変換の背後にある考え方は、スタック内の各位置に変数を関連付けることです。したがって、スタック操作はスタック変数を含む割り当てになります。
例
[7]の次のバイトコードを見てみましょう。
iload 1 // 変数x1をロードし、スタックにプッシュします iload 2 // 変数x2をロードし、スタックにプッシュします iadd // 2つの値をポップし、その合計をスタックにプッシュします istore 1 // スタックから値をポップし、変数 x1 に格納します
上記は、次の 3 つのアドレス コードに変換されます。
stack1 = x1 // 1をロード stack2 = x2 // 2をロード スタック1 = スタック1 + スタック2 // iadd x1 = stack1 // 1をストアする
一般に、結果のコードには静的単一代入形式はありません。
スートアップ
Sootは現在、パダーボルン大学のセキュアソフトウェアエンジニアリンググループによって開発されたSootUpフレームワークに引き継がれています。[8] SootUpは、バイトコードの最適化ではなく静的プログラム分析に重点を置いた斬新な設計によるSootの完全な再実装です。
参考文献
- ^ 「Soot - Java最適化フレームワーク」. github.com . 2024年1月16日閲覧。
- ^ 「Java および Android アプリケーションを分析および変換するためのフレームワーク」。Sable.mcgill.ca。2008年 12 月 28 日時点のオリジナルよりアーカイブ。2016 年 8 月 10 日閲覧。
- ^ 「チュートリアル · Sable/soot Wiki · GitHub」。Sable.mcgill.ca。2016年1月12日。 2016年8月10日閲覧。
- ^ 「CASCON 最初の 10 年間の高影響力論文」Dl.acm.org 。 2016 年 8 月 10 日閲覧。
- ^ ヴァレライ、ラジャ (1998)。 「ジンプルフレームワーク」。Sable.mcgill.ca。
- ^ Vallee-Rai, Raja; Hendren, Laurie J. (1998). 「Jimple: 分析と変換のための Java バイトコードの簡素化」Sable.mcgill.ca。
- ^ ヴァレ・ライ 1998年。
- ^ 「アーキテクチャを完全に見直した Soot の新バージョン」. github.com . 2024 年1 月 16 日閲覧。
さらに読む
- Vallée-Rai, Raja; Co, Phong; Gagnon, Etienne; Hendren, Laurie; Lam, Patrick; Sundaresan, Vijay (1998)。「Soot: Java バイトコード最適化フレームワーク」。1999年共同研究に関する先端研究センター会議議事録。CASCON '99。CASCON First Decade High Impact Papersに再掲載。CASCON '10。pp. 214–224。doi :10.1145/1925805.1925818。
- パトリス・ポミンヴィル。銭、馮。ヴァレライ、ラジャ;ヘンドレン、ローリー。フェルブルージュ、クラーク (2000)。属性を使用して Java を最適化するためのフレームワーク。CASCON First Decade High Impact Papersに再掲載。CASCON '10。pp. 225–241。doi :10.1145/1925805.1925819。
- Lam, Patrick; Bodden, Eric; Lhoták, Ondřej; Hendren, Laurie (2011)。「Java プログラム分析のための Soot フレームワーク: 回顧録」(PDF)。Cetusユーザーおよびコンパイラ インフラストラクチャ ワークショップ。
外部リンク
- 公式サイト
- Soot を引用している科学出版物 ( Google Scholar上)
