
GhidraのSLEIGHプロセッサ仕様ライブラリのCMakeビルド。リバースエンジニアリングツール向けに、スタンドアロンの逆アセンブリおよびp-codeリフティングエンジンを提供します。
Sleigh は、汎用マイクロプロセッサの命令セットのセマンティクスを記述するために使用される言語であり、これらのアーキテクチャ向けにコンパイルされたソフトウェアのリバースエンジニアリングを容易にするのに十分な詳細を持っています。これは Ghidra リバースエンジニアリングプラットフォーム の一部であり、その主要コンポーネントである逆アセンブラエンジンと逆コンパイラエンジンの基盤となっています。
このリポジトリは、Sleigh をスタンドアロンライブラリとしてビルドおよびパッケージ化し、Ghidra 以外のプロジェクトで再利用できるようにするための CMake ベースのビルドプロジェクトを提供します。
| 名前 | サポート |
|---|---|
| Linux | はい |
| macOS | はい |
| Windows | はい |
| 名前 | バージョン | インストールする Linux パッケージ | インストールする macOS Homebrew パッケージ |
|---|---|---|---|
| (HEAD ビルド) zlib | 最新 | zlib1g-dev | zlib |
| Git | 最新 | git | N/A |
| CMake | 3.18+ | cmake | cmake |
注記: この CMake プロジェクトは、構成時にインターネットから Ghidra のソースコードを取得します。詳細については、Ghidra ソースコードに関する注記セクションを参照してください。
ドキュメントをビルドする場合:
| 名前 | バージョン | インストールする Linux パッケージ | インストールする macOS Homebrew パッケージ |
|---|---|---|---|
| Doxygen | 最新 | doxygen | doxygen |
| GraphViz | 最新 | graphviz | graphviz |
# Clone this repository (CMake project for sleigh)
git clone https://github.com/lifting-bits/sleigh.git
cd sleigh
# Configure CMake
cmake -B build -S .
# Build Sleigh
cmake --build build --parallel 8
# Install Sleigh
cmake --install build --prefix ./install
Ghidra のソースコードは実際にはこの git リポジトリには含まれておらず、デフォルトでは CMake がインターネットから安定版を自動的に取得します。
どの Ghidra ソースコードコミットを使用/コンパイルするかをカスタマイズする方法 (独自のローカルコピーの Ghidra ソースを指定する方法を含む) の詳細については、src/README.md を参照してください。
CMake 構成は、Sleigh のパッケージのビルドもサポートしています。
例:
# Package Sleigh
cmake --build build --target package
Sleigh API の使用方法を示すために、sleigh-lift というサンプルプログラムが含まれています。これはバイト列の16進数文字列を受け取り、それを逆アセンブルするか p-code にリフトすることができます。プログラムは次のように呼び出すことができ、action 引数は disassemble または pcode のいずれかでなければなりません:
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]
例えば、次のバイト列を逆アセンブルするには:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0
そして、それを p-code にリフトするには:
$ sleigh-lift pcode x86-64.sla 4881ecc00f0000
(register,0x200,1) = INT_LESS (register,0x20,8) (const,0xfc0,8)
(register,0x20b,1) = INT_SBORROW (register,0x20,8) (const,0xfc0,8)
(register,0x20,8) = INT_SUB (register,0x20,8) (const,0xfc0,8)
(register,0x207,1) = INT_SLESS (register,0x20,8) (const,0x0,8)
(register,0x206,1) = INT_EQUAL (register,0x20,8) (const,0x0,8)
(unique,0x12c00,8) = INT_AND (register,0x20,8) (const,0xff,8)
(unique,0x12c80,1) = POPCOUNT (unique,0x12c00,8)
(unique,0x12d00,1) = INT_AND (unique,0x12c80,1) (const,0x1,1)
(register,0x202,1) = INT_EQUAL (unique,0x12d00,1) (const,0x0,1)
sleigh-lift をビルドしたくない場合は、CMake 構成時に CMake 変数 sleigh_BUILD_EXTRATOOLS オプションを OFF に設定する必要があります。
このリポジトリには、Sleigh/Ghidra の一部ではないヘルパーが含まれており、support ディレクトリにあります。次のシグネチャを持ち、システム上で特定の spec ファイルの場所を見つけるのに役立ちます:
std::optional<std::filesystem::path>
FindSpecFile(std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths);
sleigh::FindSpecFile 関数は、ユーザーが search_paths 引数を介して提供したパスを検索し、file_name という名前の spec ファイルを探します。search_paths のデフォルト引数は sleigh::gDefaultSearchPaths であり、CMake 構成時に生成されたインストール/ビルドディレクトリと、一般的なインストール場所のセットが含まれています。
ヘルパーをビルドしたくない場合は、CMake 構成時に CMake 変数 sleigh_BUILD_SUPPORT オプションを OFF に設定する必要があります。
Sleigh のインストールは、プロジェクトをビルドする際に使用できる CMake インターフェースを提供します。
CMake パッケージ構成ファイルの使用方法の例は、find_package の例にあります。
また、sleigh コンパイラを使用して .slaspec ファイルをコンパイルするための CMake ヘルパー関数 sleigh_compile も提供しています。
Sleigh 仕様のコンパイルを含むより複雑な CMake の例は、example ディレクトリにあり、アップストリームが提供する sleigh のサンプルソースコードを使用しています。
最後に、インストールされたコンパイル済み sleigh ファイルの場所は、CMake 変数 sleigh_INSTALL_SPECDIR を通じて特定できます。これはコンパイル済み sleigh ファイルのルートディレクトリへの絶対パスです---何が期待できるかを知るために、これを手動で確認することをお勧めします。
公開されている CMake 変数とモジュールについてさらに学ぶために、CMake 構成ファイル と specfiles CMake ファイル を参照することも推奨されます。
LICENSE ファイルを参照してください。