~old/libpatch

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

#libpatch

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

#Quick usage

See examples/tutorial.c.

#Dependencies

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:

./dev-env

to have a shell setup for development.

#Runtime

  • capstone
  • liburcu
  • libdw (elfutils)
  • libunwind

#Compilation

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

#Developments

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

#Workflow

#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
make

# 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.

#Emacs

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.

#Other

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.