mirror of
https://github.com/JonathanSalwan/Triton
synced 2026-06-21 13:43:30 +00:00
92 lines
2.7 KiB
Docker
92 lines
2.7 KiB
Docker
FROM --platform=linux/amd64 ubuntu:24.04
|
|
|
|
COPY . /Triton
|
|
|
|
RUN apt update && \
|
|
apt upgrade -y
|
|
|
|
# libboost >= 1.83
|
|
# libpython >= 3.12
|
|
# llvm >= 16.0
|
|
RUN DEBIAN_FRONTEND="noninteractive" \
|
|
apt install -y --no-install-suggests --no-install-recommends \
|
|
build-essential \
|
|
clang \
|
|
curl \
|
|
git \
|
|
libboost-all-dev \
|
|
libgmp-dev \
|
|
libpython3-dev \
|
|
libpython3-stdlib \
|
|
llvm-16 \
|
|
llvm-16-dev \
|
|
ninja-build \
|
|
pkg-config \
|
|
python3-pip \
|
|
python3-venv \
|
|
tar \
|
|
libmpfr-dev && \
|
|
apt clean
|
|
|
|
ENV VIRTUAL_ENV=/Triton-venv
|
|
RUN python3 -m venv $VIRTUAL_ENV
|
|
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
|
|
|
|
RUN . $VIRTUAL_ENV/bin/activate
|
|
|
|
# cmake >= 3.20
|
|
# libz3 >= 4.13.0
|
|
RUN python3 -m pip install --upgrade pip && \
|
|
python3 -m pip install \
|
|
cmake \
|
|
lief \
|
|
meson \
|
|
setuptools \
|
|
unicorn \
|
|
z3-solver
|
|
|
|
# libcapstone >= 5.0.x
|
|
RUN echo "[+] Download, build and install Capstone" && \
|
|
cd /tmp && \
|
|
curl -s -o capstone-5.0.1.tar.gz -L https://github.com/aquynh/capstone/archive/5.0.1.tar.gz && \
|
|
tar xf capstone-5.0.1.tar.gz && \
|
|
cd ./capstone-5.0.1 && \
|
|
cmake -B build -DBUILD_SHARED_LIBS=ON -GNinja && \
|
|
cd build && \
|
|
ninja install
|
|
|
|
# libbitwuzla >= 0.4.0
|
|
RUN echo "[+] Download, build and install Bitwuzla" && \
|
|
cd /tmp && \
|
|
git clone https://github.com/bitwuzla/bitwuzla.git && \
|
|
cd bitwuzla && \
|
|
python3 ./configure.py --shared && \
|
|
cd build && \
|
|
ninja -j$(nproc) install
|
|
|
|
RUN echo "[+] Build and install Triton" && \
|
|
Z3_PATH=$(python -c "import site; print(f'{site.getsitepackages()[0]}/z3')") && \
|
|
# Triton (LLVM for lifting; z3 or bitwuzla as SMT solver)
|
|
cd /Triton && \
|
|
mkdir /tmp/triton-build && \
|
|
cd /tmp/triton-build && \
|
|
cmake -S /Triton -GNinja \
|
|
-DLLVM_INTERFACE=ON \
|
|
-DCMAKE_PREFIX_PATH=$(llvm-config-16 --prefix) \
|
|
-DZ3_INTERFACE=ON \
|
|
-DZ3_INCLUDE_DIRS=$Z3_PATH/include/ \
|
|
-DZ3_LIBRARIES=$Z3_PATH/lib/libz3.so \
|
|
-DBITWUZLA_INTERFACE=ON \
|
|
-DBITWUZLA_INCLUDE_DIRS=/usr/local/include \
|
|
-DBITWUZLA_LIBRARIES=/usr/local/lib/x86_64-linux-gnu/libbitwuzla.so && \
|
|
ninja -j$(nproc) install
|
|
|
|
RUN echo "[+] Check Triton build" && \
|
|
echo export "PATH=$VIRTUAL_ENV/bin:$PATH" >> /etc/bash.bashrc && \
|
|
# Print z3 version.
|
|
python3 -c "import z3; print('Z3 version:', z3.get_version_string())" && \
|
|
# Next command fails if Triton has no z3 or bitwuzla support.
|
|
python3 -c "from triton import *; ctx=TritonContext(ARCH.X86_64); ctx.setSolver(SOLVER.Z3); ctx.setSolver(SOLVER.BITWUZLA);"
|
|
|
|
ENTRYPOINT /bin/bash
|