by lifting-bits

lifting-bits / remill

Library for lifting of x86, amd64, and aarch64 machine code to LLVM bitcode

499 Stars 71 Forks Last release: 27 days ago (v3.0.6) Apache License 2.0 812 Commits 8 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Remill Slack Chat

Remill is a static binary translator that translates machine code instructions into LLVM bitcode. It translates x86 and amd64 machine code (including AVX and AVX512) into LLVM bitcode. AArch64 support is underway.

Remill focuses on accurately lifting instructions. It is meant to be used as a library for other tools, e.g. McSema.

Build Status

Build Status

Additional Documentation

Getting Help

If you are experiencing undocumented problems with Remill then ask for help in the

channel of the Empire Hacking Slack.

Supported Platforms

Remill is supported on Linux platforms and has been tested on Ubuntu 14.04, 16.04, and 18.04. Remill also works on macOS, and has experimental support for Windows.

Remill's Linux version can also be built via Docker for quicker testing.


Most of Remill's dependencies can be provided by the cxx-common repository. Trail of Bits hosts downloadable, pre-built versions of cxx-common, which makes it substantially easier to get up and running with Remill. Nonetheless, the following table represents most of Remill's dependencies.

| Name | Version | | ---- | ------- | | Git | Latest | | CMake | 3.2+ | | Google Flags | Latest | | Google Log | Latest | | Google Test | Latest | | LLVM | 3.5+ | | Clang | 3.5+ | | Intel XED | Latest | | Python | 2.7 | | Unzip | Latest | | ccache | Latest |

Getting and Building the Code

Docker Build

Remill now comes with a Dockerfile for easier testing. This Dockerfile references the cxx-common container to have all pre-requisite libraries available.

The Dockerfile allows for quick builds of multiple supported LLVM, architecture, and Linux configurations.

Quickstart (builds Remill against LLVM 8.0 on Ubuntu 18.04 for AMD64):

Clone Remill: ```shell

Clone the repository.

git clone cd remill ```

Build Remill Docker container: ```shell

do the build

docker build . -t remill:llvm800-ubuntu18.04-amd64 \ -f Dockerfile \ --build-arg UBUNTUVERSION=18.04 \ --build-arg ARCH=amd64 \ --build-arg LLVMVERSION=800 ```

Ensure remill works: ```shell

Decode some AMD64 instructions to LLVM

docker run --rm -it remill:llvm800-ubuntu18.04-amd64 \ --arch amd64 --ir_out /dev/stdout --bytes c704ba01000000

Decode some AArch64 instructions to LLVM

docker run --rm -it remill:llvm800-ubuntu18.04-amd64 \ --arch aarch64 --address 0x400544 --ir_out /dev/stdout \ --bytes FD7BBFA90000009000601891FD030091B7FFFF97E0031F2AFD7BC1A8C0035FD6 ```

On Linux

First, update aptitude and get install the baseline dependencies.

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install

Ubuntu 14.04, 16.04

sudo apt-get install realpath

Next, clone the repository. This will clone the code into the

git clone

Next, we build Remill. This script will create another directory,

, in the current working directory. All remaining dependencies needed by Remill will be built in the

Next, we can install Remill. Remill itself is a library, and so there is no real way to try it. However, you can head on over to the McSema repository, which uses Remill for lifting instructions.

cd ./remill-build
sudo make install

We can also build and run Remill's test suite.

cd ./remill-build
make test_dependencies
make test

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.