
Сборка CMake библиотеки спецификаций процессора SLEIGH из Ghidra, предоставляющая автономные движки дизассемблирования и подъёма p-code для инструментов обратной разработки.
Sleigh — это язык, используемый для описания семантики наборов инструкций микропроцессоров общего назначения с достаточной детализацией, чтобы облегчить обратную разработку программного обеспечения, скомпилированного для этих архитектур. Он является частью платформы обратной разработки Ghidra и лежит в основе двух её ключевых компонентов: движков дизассемблирования и декомпиляции.
Этот репозиторий предоставляет проект сборки Sleigh на основе CMake, чтобы его можно было собрать и упаковать как отдельную библиотеку и повторно использовать в проектах, отличных от Ghidra.
| Название | Поддержка |
|---|---|
| Linux | Да |
| macOS | Да |
| Windows | Да |
| Название | Версия | Пакет Linux для установки | Пакет macOS Homebrew для установки |
|---|---|---|---|
| (сборки HEAD) zlib | Актуальная | zlib1g-dev | zlib |
| Git | Последняя | git | Н/Д |
| 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 автоматически загрузит для вас стабильную версию из интернета.
Пожалуйста, см. src/README.md для получения дополнительной информации о том, как настроить, какой коммит исходного кода Ghidra будет использоваться/компилироваться, включая указание вашей собственной локальной копии исходного кода Ghidra.
Конфигурация CMake также поддерживает сборку пакетов для Sleigh.
Например:
# Package Sleigh
cmake --build build --target package
Пример программы под названием sleigh-lift включён для демонстрации того, как использовать API Sleigh. Она принимает шестнадцатеричную строку байтов и может дизассемблировать её или поднять в 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-переменной sleigh_BUILD_EXTRATOOLS в OFF во время конфигурации CMake.
Этот репозиторий содержит вспомогательную утилиту, не являющуюся частью 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 будет искать в путях, предоставленных пользователем через аргумент search_paths, файл спецификации с именем file_name. Аргумент по умолчанию для search_paths — это sleigh::gDefaultSearchPaths, который содержит директории установки/сборки, сгенерированные во время конфигурации CMake, и набор общих мест установки.
Если вы не хотите собирать вспомогательные утилиты, вы должны установить опцию CMake-переменной sleigh_BUILD_SUPPORT в OFF во время конфигурации CMake.
Установка Sleigh предоставляет интерфейс CMake, который вы можете использовать при сборке вашего проекта.
Вы можете найти пример использования файла конфигурации пакета CMake в примере find_package.
Мы также предоставляем вспомогательную функцию CMake sleigh_compile для компиляции ваших файлов .slaspec с помощью компилятора sleigh.
Вы можете найти более сложный пример CMake с компиляцией спецификаций Sleigh в директории example, которая использует предоставленный вышестоящим проектом исходный код примера sleigh.
Наконец, вы можете найти установленные скомпилированные файлы sleigh через CMake-переменную sleigh_INSTALL_SPECDIR, которая является абсолютным путём к корневой директории для скомпилированных файлов sleigh — вам следует вручную проверить это, чтобы знать, чего ожидать.
Обращение к файлу конфигурации CMake и CMake-файлу specfiles также рекомендуется для изучения предоставляемых CMake-переменных и модулей.
См. файл LICENSE.