Sleighは、これらのアーキテクチャ用にコンパイルされたソフトウェアのリバースエンジニアリングを容易にするのに十分な詳細を備えた、汎用マイクロプロセッサの命令セットのセマンティクスを説明するために使用される言語です。 Ghidra Reverse Engineering Platformの一部であり、2つの主要なコンポーネントという2つの主要なコンポーネントと、その分解エンジンと逆コンパイルエンジンを支えています。
このリポジトリは、Sleigh向けのCmakeベースのビルドプロジェクトを提供しているため、スタンドアロンライブラリとして構築およびパッケージ化し、Ghidra以外のプロジェクトで再利用できます。
| 名前 | サポート |
|---|---|
| Linux | はい |
| macos | はい |
| Windows | はい |
| 名前 | バージョン | インストールするLinuxパッケージ | インストールするMacOS Homebrewパッケージ |
|---|---|---|---|
| (ヘッドビルド)Zlib | 最近の | ZLIB1G-DEV | Zlib |
| git | 最新 | git | n/a |
| cmake | 3.18+ | cmake | cmake |
注:このCmakeプロジェクトは、構成中にGhidraソースコードをインターネットから引き出します。詳細については、Ghidraソースコードセクションのメモを参照してください。
ドキュメントの構築:
| 名前 | バージョン | インストールするLinuxパッケージ | インストールするMacOS Homebrewパッケージ |
|---|---|---|---|
| ドキシゲン | 最新 | ドキシゲン | ドキシゲン |
| 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 ./installGhidraソースコードは実際にはこのgitリポジトリに含まれておらず、デフォルトでは、Cmakeはインターネットから安定したバージョンを自動的にプルします。
Ghidraソースの独自のコピーを指定するなど、どのGhidraソースコードコミットを使用/コンパイルするかをカスタマイズする方法の詳細についてはsrc/README.mdを参照してください。
Cmake構成は、そりの建物パッケージもサポートしています。
例えば:
# Package Sleigh
cmake --build build --target packagesleigh-liftと呼ばれる例プログラムが含まれており、Slaigh APIの使用方法を実証しています。 16進のバイト文字列が必要であり、それを分解したり、Pコードに持ち上げたりすることができます。プログラムは次のように呼び出すことができ、 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コードに持ち上げます:
$ 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 sleigh_BUILD_EXTRATOOLSオプションをCmake構成中にOFFする必要があります。
このリポジトリには、Sleigh/Ghidraの一部ではなくヘルパーが含まれており、 supportディレクトリで見つけることができます。次の署名があり、ユーザーがシステム上の特定の仕様ファイルの場所を見つけるのに役立ちます。
std::optional<std::filesystem::path>
FindSpecFile (std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths ); sleigh::FindSpecFile関数は、 file_nameという名前の仕様ファイルのsearch_paths引数を介してユーザーが提供するパスを検索します。 search_pathsのデフォルトの引数は、Cmake構成中に生成されたインストール/ビルドディレクトリを含むGdefaultSearchPathsと共通のインストール場所のセットを含むsleigh::gDefaultSearchPathsです。
ヘルパーを構築したくない場合は、CMake構成中にCMAKE変数sleigh_BUILD_SUPPORTオプションをOFFする必要があります。
Shailighのインストールは、プロジェクトを構築するときに使用できるCmakeインターフェイスを提供します。
find_packageの例で、cmakeパッケージ構成ファイルを使用する方法の例を見つけることができます。
また、Cmakeヘルパー機能sleigh_compileを提供して、Shailighコンパイラを使用して.slaspecファイルをコンパイルします。
アップストリームが提供するSaleighの例のソースコードを使用するexampleディレクトリに、Shayの仕様をコンパイルすると、より複雑なCmakeの例を見つけることができます。
最後に、コンパイルされたshayファイルのルートディレクトリへの絶対的なパスであるCmake変数sleigh_INSTALL_SPECDIRを介して、インストールされたコンパイルされたshayfilesを見つけることができます。
cmake configファイルとspecfiles cmakeファイルを参照することは、露出したCmake変数とモジュールについてさらに学習するために提案されています。
ライセンスファイルを参照してください。