Sleigh는 일반 목적 마이크로 프로세서의 명령 세트를 설명하는 데 사용되는 언어이며, 이러한 아키텍처를 위해 컴파일 된 소프트웨어의 역 엔지니어링을 용이하게하기에 충분한 세부 사항이 있습니다. GHIDRA 리버스 엔지니어링 플랫폼의 일부이며, 주요 구성 요소 중 두 가지를 뒷받침합니다 : 분해 및 디 컴파일 엔진.
이 저장소는 Sleigh 용 Cmake 기반 빌드 프로젝트를 제공하여 독립형 라이브러리로 구축 및 포장하여 Ghidra가 아닌 프로젝트에서 재사용 할 수 있습니다.
| 이름 | 지원하다 |
|---|---|
| 리눅스 | 예 |
| 마코스 | 예 |
| 창 | 예 |
| 이름 | 버전 | 설치할 Linux 패키지 | MACOS 홈브류 패키지 설치 |
|---|---|---|---|
| (헤드 빌드) zlib | 최근의 | zlib1g-dev | zlib |
| git | 최신 | git | N/A |
| cmake | 3.18+ | cmake | cmake |
참고 :이 CMake 프로젝트는 구성 중에 인터넷에서 GHIDRA 소스 코드를 가져옵니다. 자세한 내용은 GHIDRA 소스 코드 섹션의 메모를 참조하십시오.
문서 작성 :
| 이름 | 버전 | 설치할 Linux 패키지 | MACOS 홈브류 패키지 설치 |
|---|---|---|---|
| 독사시 | 최신 | 독사시 | 독사시 |
| 그래프 비즈 | 최신 | 그래프 비즈 | 그래프 비즈 |
# 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 Repo에 포함되지 않으며 기본적으로 CMAKE는 인터넷에서 안정적인 버전을 자동으로 가져옵니다.
GHIDRA 소스의 로컬 사본을 지정하는 것을 포함하여 어떤 GHIDRA 소스 코드 커밋을 사용/컴파일하는지 사용자 정의하는 방법에 대한 자세한 내용은 src/README.md 참조하십시오.
CMAKE 구성은 또한 Sleigh의 구축 패키지를 지원합니다.
예를 들어:
# Package Sleigh
cmake --build build --target package Sleigh API 사용 방법을 보여주기 위해 sleigh-lift 라는 예제 프로그램이 포함되었습니다. 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 function은 file_name 이라는 이름의 사양 파일에 대한 search_paths 인수를 통해 사용자가 제공 한 경로를 검색합니다. search_paths 에 대한 기본 인수는 sleigh::gDefaultSearchPaths 입니다. CMAKE 구성 중에 생성 된 설치/빌드 디렉토리가 포함되어 있으며 일련의 공통 설치 위치가 포함되어 있습니다.
헬기를 구축하지 않으려면 CMAKE 변수 sleigh_BUILD_SUPPORT 옵션을 CMAKE 구성 중에 OFF 로 설정해야합니다.
Sleigh의 설치는 프로젝트를 구축 할 때 사용할 수있는 CMAKE 인터페이스를 제공합니다.
find_package 예제에서 cmake 패키지 구성 파일을 사용하는 방법의 예를 찾을 수 있습니다.
또한 Sleigh 컴파일러를 사용하여 .slaspec 파일을 컴파일하기 위해 CMAKE 도우미 기능 sleigh_compile 제공합니다.
업스트림 제공 SLEIGH 예제 소스 코드를 사용하는 example 디렉토리에서 Sleigh 사양을 컴파일하는보다 복잡한 CMAKE 예제를 찾을 수 있습니다.
마지막으로, CMAKE 변수 sleigh_INSTALL_SPECDIR 통해 설치된 컴파일 된 슬라이 파일을 찾을 수 있습니다.이 파일은 컴파일 된 슬라이 파일의 루트 디렉토리의 절대 경로입니다.
CMAKE 구성 파일 및 specfiles CMAKE 파일 참조도 노출 된 CMAKE 변수 및 모듈에 대한 자세한 내용도 제안됩니다.
라이센스 파일을 참조하십시오.