Skip to content

athre0z/disas-bench

Repository files navigation

Disassembler Benchmark

This repository holds benchmarking code for various x86/x86-64 disassembler libraries.

Results

Bench Intel NixOS, Linux 6.0.10, GCC 11, rustc 1.67.0-nightly, i7-12700K

Candidates

Capstone

DiStorm

Intel XED

Zydis

iced

bddisasm

yaxpeax-x86

Sleigh

Benchmarking

Windows:

REM Start "x64 Native Tools Command Prompt for VS 2019"
REM Start git bash:
"C:\Program Files\Git\bin\bash.exe"

Windows/Linux/macOS:

git clone --recursive 'https://github.com/athre0z/disas-bench.git'
cd disas-bench.git
./make-all.sh
# Windows: python
python3 -mvenv venv
# Windows: source venv/Scripts/activate
source venv/bin/activate
pip install -r requirements.txt
# Optional args: <code-offset> <code-len> <filename> [loop-count]
# macOS/Windows: python bench.py
LD_LIBRARY_PATH=$(pwd)/bench/distorm python bench.py

The optional bench.py arguments are:

  • <code-offset> = offset of the code section (in decimal or 0x hex)
  • <code-len> = length of the code section (in decimal or 0x hex)
  • <filename> = 64-bit x86 binary file to decode and format
  • [loop-count] = optional loop count. Total number of bytes decoded and formatted is <code-len> * [loop-count]

Contributing

If you feel like the benchmark for a lib doesn't drive it to its full potential or treats it unfairly, I'd be happy to accept PRs with improvements!