
Compilação CMake da biblioteca de especificação do processador SLEIGH do Ghidra, fornecendo mecanismos autónomos de desmontagem e elevação de p-code para ferramentas de engenharia reversa.
Sleigh é uma linguagem usada para descrever a semântica dos conjuntos de instruções de microprocessadores de uso geral, com detalhes suficientes para facilitar a engenharia reversa de software compilado para essas arquiteturas. Faz parte da plataforma de engenharia reversa Ghidra e sustenta dois de seus principais componentes: seus motores de desmontagem e descompilação.
Este repositório fornece um projeto de compilação baseado em CMake para o Sleigh, para que ele possa ser compilado e empacotado como uma biblioteca independente e reutilizado em projetos além do Ghidra.
| Nome | Suporte |
|---|---|
| Linux | Sim |
| macOS | Sim |
| Windows | Sim |
| Nome | Versão | Pacote Linux a Instalar | Pacote macOS Homebrew a Instalar |
|---|---|---|---|
| (builds HEAD) zlib | Recente | zlib1g-dev | zlib |
| Git | Mais recente | git | N/A |
| CMake | 3.18+ | cmake | cmake |
NOTA: Este projeto CMake baixa o código-fonte do Ghidra da internet durante a configuração. Consulte a nota sobre a seção de código-fonte do Ghidra para mais detalhes.
Para compilar a documentação:
| Nome | Versão | Pacote Linux a Instalar | Pacote macOS Homebrew a Instalar |
|---|---|---|---|
| Doxygen | Mais recente | doxygen | doxygen |
| GraphViz | Mais recente | 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
O código-fonte do Ghidra não está realmente incluído neste repositório git e, por padrão, o CMake baixará automaticamente uma versão estável da internet para você.
Consulte src/README.md para mais informações sobre como personalizar qual commit do código-fonte do Ghidra será usado/compilado, incluindo a especificação de sua própria cópia local do código-fonte do Ghidra.
A configuração do CMake também suporta a criação de pacotes para o Sleigh.
Por exemplo:
# Package Sleigh
cmake --build build --target package
Um programa de exemplo chamado sleigh-lift foi incluído para demonstrar como usar a API do Sleigh. Ele recebe uma string hexadecimal de bytes e pode desmontá-la ou elevá-la para p-code. O programa pode ser invocado da seguinte forma, onde o argumento action deve ser disassemble ou pcode:
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]
Por exemplo, para desmontar a seguinte string de bytes:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0
E para elevá-la para 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)
Se você não quiser compilar o sleigh-lift, deve definir a opção da variável CMake sleigh_BUILD_EXTRATOOLS como OFF durante a configuração do CMake.
Este repositório contém um auxiliar que não faz parte do Sleigh/Ghidra, que você pode encontrar no diretório support. Ele tem a seguinte assinatura e pode ajudar o usuário a encontrar a localização de um determinado arquivo de especificação no sistema:
std::optional<std::filesystem::path>
FindSpecFile(std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths);
A função sleigh::FindSpecFile procurará nos caminhos fornecidos pelo usuário através do argumento search_paths um arquivo de especificação com o nome file_name. O argumento padrão para search_paths é sleigh::gDefaultSearchPaths, que contém os diretórios de instalação/compilação gerados durante a configuração do CMake e um conjunto de locais de instalação comuns.
Se você não quiser compilar os auxiliares, deve definir a opção da variável CMake sleigh_BUILD_SUPPORT como OFF durante a configuração do CMake.
Uma instalação do Sleigh fornece uma interface CMake que você pode usar ao compilar seu projeto.
Você pode encontrar um exemplo de como usar o arquivo de configuração do pacote CMake no exemplo find_package.
Também fornecemos uma função auxiliar CMake sleigh_compile para compilar seus arquivos .slaspec usando um compilador sleigh.
Você pode encontrar um exemplo CMake mais complexo com a compilação de especificações Sleigh no diretório example, que usa o código-fonte de exemplo sleigh fornecido upstream.
Por fim, você pode localizar os arquivos sleigh compilados instalados através da variável CMake sleigh_INSTALL_SPECDIR, que é um caminho absoluto para o diretório raiz dos arquivos sleigh compilados---você deve inspecioná-lo manualmente para saber o que esperar.
Também é sugerido consultar o arquivo de configuração CMake e o arquivo CMake specfiles para aprender mais sobre as variáveis e módulos CMake expostos.
Consulte o arquivo LICENSE.