この拡張機能は、Ghidra の eBPF アーキテクチャ サポートを実装し、eBPF プログラムの逆アセンブリと逆コンパイルを可能にします。
2023 年 5 月以降、eBPF-for-Ghidra は公式 NationalSecurityAgency/Ghidra リポジトリに含まれています。
eBPF モジュールの最新のアップデートと修正を Ghidra で直接入手できます。
このリポジトリは将来アーカイブされる可能性があります。
eBPF プログラムの例はここから入手できます。
eBPF の逆アセンブルと逆コンパイルの例:
File → Install Extensions...
にインストールします。GHIDRA_INSTALL_DIR=${GHIDRA_HOME} gradle
し、Ghidra を使用してインストールします: File → Install Extensions...
GhidraExtensions
ディレクトリに作成します。2019 年 3 月 9 日 — eBPF マップの実装、カスタム再配置ハンドラーが実装されました
19.09.2019 — スタックの問題が解決されました
20.09.2019 — eBPF コール ヘルパーは syscall として実装され、カスタム eBPFAnalyzer を通じてヘルパーの署名が追加されました
23.09.2019 — 悪いブックマークを修正
01.12.2020 — 新しい eBPF ヘルパーが追加されました
23.06.2022 — 相対呼び出しのサポートを追加しました ( R_BPF_64_32
再配置タイプ)。このアイデアをくれた @cnwangjihe に感謝します。 bpf_call->src_reg == BPF_PSEUDO_CALL
の呼び出し命令のimm
には、ターゲット関数への相対オフセットが含まれます。
前に:
後:
24.06.2022 — eBPF プロセッサの主要サプライヤーとして公式 Ghidra リポジトリにプル リクエストを作成
2022.12.19 — BPF_ATOMIC 操作のサポートの追加、ALU32 命令の追加、BPF_JMP32 命令の追加、JSET 命令の修正
03.05.2023 — eBPF プロセッサのサポートがコミット 506ca1e の Ghidra 公式リポジトリに追加されました
Ghidra 10.3 以降、eBPF モジュールはデフォルトで Ghidra に含まれています。このプロジェクトをビルドして Ghidra 拡張機能として追加する必要はもうありません。 Ghidra の古いバージョンのユーザーは、既存のリリースを通じて eBPF モジュールに引き続きアクセスできます。
カーネルの公式ドキュメント
公式カーネルドキュメント - 質問
Ghidra でテストする eBPF プログラム
RustのシンプルなeBPF逆アセンブラ
Rust 仮想マシンと eBPF プログラム用の JIT コンパイラ
eBPF ヘルパー (すべて)
eBPFの概要