O trenó é um idioma usado 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 de 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 trenó para que possa ser construído e embalado como uma biblioteca independente e reutilizada em projetos que não sejam Ghidra.
| Nome | Apoiar |
|---|---|
| Linux | Sim |
| macos | Sim |
| Windows | Sim |
| Nome | Versão | Pacote Linux para instalar | MacOS Homebrew Package para instalar |
|---|---|---|---|
| (Cabeça constrói) Zlib | Recente | zlib1g-dev | zlib |
| Git | Mais recente | git | N / D |
| Cmake | 3.18+ | cmake | cmake |
Nota : Este projeto CMake extrai o código -fonte Ghidra da Internet durante a configuração. Veja a nota na seção de código -fonte Ghidra para obter mais detalhes.
Para a documentação de construção:
| Nome | Versão | Pacote Linux para instalar | MacOS Homebrew Package para 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 ./installO código -fonte Ghidra não está realmente incluído neste repositório Git e, por padrão, o CMake puxará automaticamente uma versão estável da Internet para você.
Consulte src/README.md para obter mais informações sobre como personalizar qual confirmação do código -fonte Ghidra será usado/compilado, incluindo a especificação de sua própria cópia local da fonte Ghidra.
A configuração do CMake também suporta pacotes de construção para trenó.
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 de trenó. É preciso uma sequência hexadecimal de bytes e pode desmontá-lo ou levantá-lo para o código p. O programa pode ser chamado 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 sequência de bytes:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0E para levantá-lo no código 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) Se você não deseja construir sleigh-lift , deve definir a opção CMake Variable sleigh_BUILD_EXTRATOOLS para OFF durante a configuração do CMake.
Este repositório contém um ajudante não parte do trenó/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ções 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 pesquisará os caminhos fornecidos pelo usuário através do argumento search_paths para um arquivo de especificação com o nome file_name . O argumento padrão do search_paths é sleigh::gDefaultSearchPaths , que contém os diretórios de instalação/construção gerados durante a configuração do CMake e um conjunto de locais comuns de instalação.
Se você não deseja construir os ajudantes, deve definir a opção CMake Variable sleigh_BUILD_SUPPORT para OFF durante a configuração do CMake.
Uma instalação do trenó fornece uma interface CMake que você pode usar ao criar 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 CMake Helper sleigh_compile para compilar seus arquivos .slaspec usando um compilador de trenó.
Você pode encontrar um exemplo mais complexo do CMake com as especificações de trenó de compilação no diretório example , que usa o código-fonte do Sleigh de Sleigh, fornecido a montante.
Por fim, você pode localizar os arquivos de trenó instalados compilados através da variável cmake sleigh_INSTALL_SPECDIR , que é um caminho absoluto para o diretório raiz dos arquivos de trenó compilados-você deve inspecionar manualmente isso para saber o que esperar.
Referenciando o arquivo CMake Config e o arquivo specfiles também é sugerido para aprender mais sobre as variáveis e módulos expostos do CMake.
Veja o arquivo de licença.