Sleigh-это язык, используемый для описания семантики наборов инструкций микропроцессоров общего назначения, с достаточным количеством деталей, чтобы облегчить обратную технику программного обеспечения, скомпилированного для этих архитектур. Он является частью реверсийной платформы Ghidra и лежит в основе двух основных компонентов: ее разборки и декомпиляционных двигателей.
Этот репозиторий обеспечивает проект сборки на основе Cmake для Sleigh, чтобы его можно было построить и упаковать в качестве отдельной библиотеки и использоваться в других проектах, кроме Ghidra.
| Имя | Поддерживать |
|---|---|
| Linux | Да |
| macOS | Да |
| Окна | Да |
| Имя | Версия | Пакет Linux для установки | MacOS Homebrew Package для установки |
|---|---|---|---|
| (Голова строит) Zlib | Недавний | zlib1g-dev | Злиб |
| Git | Последний | git | N/a |
| Cmake | 3.18+ | Cmake | Cmake |
Примечание . Этот проект Cmake вытаскивает исходный код Ghidra из Интернета во время конфигурации. См. Примечание в разделе исходного кода Ghidra для получения более подробной информации.
Для строительства документации:
| Имя | Версия | Пакет Linux для установки | MacOS Homebrew Package для установки |
|---|---|---|---|
| Доксиген | Последний | Доксиген | Доксиген |
| График | Последний | График | График |
# 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-код. Программа может быть вызвана следующим образом, когда аргумент 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 Variable 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 Variable sleigh_BUILD_SUPPORT чтобы OFF во время конфигурации Cmake.
Установка Sleigh предоставляет интерфейс Cmake, который вы можете использовать при создании своего проекта.
Вы можете найти пример того, как использовать файл конфигурации пакета Cmake в примере find_package.
Мы также предоставляем функцию Hmake Helper Function sleigh_compile для составления ваших файлов .slaspec с помощью компилятора сала.
Вы можете найти более сложный пример Cmake с составлением спецификаций сала в каталоге example , в котором используется исходный код Sleigh, предоставленного вверх по течению.
Наконец, вы можете найти установленные скомпилированные файлы сани через переменную cmake variable sleigh_INSTALL_SPECDIR , который является абсолютным путем к корневому каталогу для скомпилированных файлов сани-вы должны вручную осмотреть это, чтобы узнать, чего ожидать.
Ссылка на файл конфигурации Cmake и файл specfiles Cmake также предлагается для получения дополнительной информации о расподнятых переменных Cmake и модулях.
Смотрите файл лицензии.