
기계 코드를 LLVM 비트코드로 리프팅하는 라이브러리
Remill은 정적 바이너리 변환기로, 기계어 명령어를 LLVM 비트코드로 변환합니다. AArch64 (64-bit ARMv8), SPARC32 (SPARCv8), SPARC64 (SPARCv9), x86 및 amd64 기계어 (AVX 및 AVX512 포함)를 LLVM 비트코드로 변환합니다. AArch32 (32-bit ARMv8 / ARMv7) 지원은 진행 중입니다.
Remill은 명령어를 정확하게 리프팅하는 데 중점을 둡니다. 이는 다른 도구(예: McSema)를 위한 라이브러리로 사용됩니다.
Remill의 작동 방식을 이해하려면 다음 자료를 참조하세요:
기여하고 싶다면 기여 방법을 확인하세요.
Doxygen을 사용하여 자세한 API 문서를 생성합니다:
# Install Doxygen (macOS)
brew install doxygen graphviz
# Install Doxygen (Ubuntu/Debian)
sudo apt-get install doxygen graphviz
# Generate documentation
doxygen
# Open docs/doxygen/html/index.html in your browser
문서 스타일 및 기여에 대한 자세한 내용은 docs/DOCUMENTATION.md를 참조하세요.
Remill에서 문서화되지 않은 문제가 발생하는 경우 Empire Hacking Slack의 #binary-lifting 채널에서 도움을 요청하세요.
Remill은 Linux 플랫폼에서 지원되며 Ubuntu 22.04에서 테스트되었습니다. 또한 macOS에서도 작동하며 Windows에 대한 실험적 지원이 있습니다.
Remill의 Linux 버전은 더 빠른 테스트를 위해 Docker를 통해 빌드할 수도 있습니다.
Remill은 다음 종속성을 사용합니다:
dependencies/의 superbuild를 사용하여 프로젝트를 빌드합니다. 종속성 관리 시스템에 대한 자세한 내용은 Remill 종속성 관리를 참조하세요.
git clone https://github.com/lifting-bits/remill
cd remill
# Step 1: Build dependencies (including LLVM)
cmake -G Ninja -S dependencies -B dependencies/build
cmake --build dependencies/build
# Step 2: Build remill
cmake -G Ninja -B build -DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install -DCMAKE_BUILD_TYPE=Release
cmake --build build
참고: 이 작업은 Visual Studio 개발자 프롬프트에서 실행해야 합니다.
# Step 1: Build dependencies
cmake -G Ninja -S dependencies -B dependencies/build -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build dependencies/build
# Step 2: Build remill
cmake -G Ninja -B build -DCMAKE_PREFIX_PATH:PATH=%CD%/dependencies/install -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Install LLVM via Homebrew
brew install llvm@17
LLVM_PREFIX=$(brew --prefix llvm@17)
# Build dependencies with external LLVM
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON "-DCMAKE_PREFIX_PATH:PATH=$LLVM_PREFIX"
cmake --build dependencies/build
# Build remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build
# Build dependencies with external LLVM
cmake -G Ninja -S dependencies -B dependencies/build -DUSE_EXTERNAL_LLVM=ON
cmake --build dependencies/build
# Build remill
cmake -G Ninja -B build "-DCMAKE_PREFIX_PATH:PATH=$(pwd)/dependencies/install" -DCMAKE_BUILD_TYPE=Release
cmake --build build
| 이름 | 버전 |
|---|
| Git | Latest |
| CMake | 3.21+ |
| Ninja | 1+ |
| Google Flags | 52e94563 |
| Google Log | v0.7.1 |
| Google Test | v1.17.0 |
| LLVM | 15+ |
| Clang | 15+ |
| Intel XED | v2025.06.08 |
| Python | 3+ |