Dynamic binary patcher

60aba19 New build system

~old pushed to ~old/libpatch git

4 hours ago

0940a1b wip

~old pushed to ~old/libpatch git

4 hours ago

Guix: builds.sr.ht status Debian: builds.sr.ht status Ubuntu: builds.sr.ht status Arch Linux: builds.sr.ht status


Lightweight dynamic binary probe inserter. Can be used for dynamic binary instrumentation and other usages.

#Quick usage

See examples/tutorial.c.


If you're not using Guix, then here's the list of dependencies depending on your usage. However, if you are using Guix, simply do:


to have a shell setup for development.


  • capstone
  • liburcu
  • libdw (elfutils)
  • libunwind


  • gcc >= 8 || clang >= 8
  • Guile 3
  • GNU Make
  • pkg-config


  • dyninst
  • gdb
  • git
  • guix
  • lcov
  • guile-quickcheck (test fuzzing)
  • lttng-ust
  • perf


#Build system

Keep it simple by using a single Makefile. Architecture dependent sources should be set under arch/ARCH and include/libpatch/ARCH.

Here's the workflow for hacking

# Configure
./configure [OPTION]... [VAR=VALUE]...

# User configuration
cat -> .local.mk

# Compile

# Test
make check
make check-nocolor
make check-fuzz

# Reproducible build with Guix
make guix-build

# Coverage
make coverage-html
make coverage-summary.txt

# Clean whole project
make clean

# Installation
make install

# Documentation
make pdf
make html
make info

You can customize the build using .local.mk. .config.mk is reserved for the configuration script.


The project can be compiled and tested from Emacs. If you're using the package projectile, then you're good to go. If not, look at what .dir-locals.el does and tweak it to your needs.


If you're not using Emacs, then you can still use the scripts under scripts/. Some of these scripts assume that you're using Guix. Others don't. However, they all require Guile 3.0.8.