I enjoy building secure and correct systems. I have built a number of static analysis and automated verification tools, with a recent focus on analysis of binaries.
Data structures that may be generally useful
- haggle [39 β π]: An efficient graph library for Haskell
- persistent-vector [27 β π]: Persistent vectors for Haskell based on array mapped tries
- robbed [4 β]: A pure Haskell implementation of Reduced Ordered Binary Decision Diagrams (BDDs)
- ql-grep [5 β]: A code search tool that implements CodeQL on the tree-sitter infrastructure
- build-bom [46 β]: Dynamically discover the commands used to create a piece of software
- whole-program-llvm [698 β]: A wrapper script to build whole-program LLVM bitcode files; note that I consider this to be obsoleted by
build-bom
, which takes a more robust approach to the same problem - itanium-abi [12 β π]: An implementation of C++ name mangling for the Itanium ABI
- what4-serialize [0 β]: Serialization/deserialization for What4 expressions
- crepitans [2 β]: A tool for scriptable exploration of binaries
- dismantle [25 β]: A library of assemblers and disassemblers derived from LLVM TableGen data
- portable-executable [2 β]: Tools for working with the Windows Portable Executable (PE) file format
- semmc [36 β]: Stratified synthesis for learning machine code instruction semantics
- macaw [208 β]: Open source binary analysis tools.
- macaw-loader [5 β]: Uniform interface to load a binary executable and get Macaw Memory and a list of entry points.
- renovate [47 β]: A library for binary analysis and rewriting
- language-sleigh [5 β]: A parser for the Sleigh language, which is used to represent ISA semantics in Ghidra
- mctrace [5 β]: An implementation of DTrace for machine code
- ddmin [3 β]: An implementation of delta debugging (ddmin) in Haskell
- surveyor [18 β]: A symbolic debugger for C/C++ (via LLVM), machine code, and JVM programs
- binary-walkr [2 β]: A tool for examining ELF binaries
Note that these are interesting and informative, but definitely not efficient enough to use in production
- satisfaction [2 β]: A DPLL SAT solver written in Haskell
- datalog [102 β]: A pure Haskell implementation of Datalog
- ifscs [4 β π]: An inductive form set constraint solver in Haskell
- satir [1 β]: An implementation of a SAT solver in Rust
- haskell-pragma.el [3 β]: An emacs hydra to enable Haskell language extensions efficiently
- haskell-interactive-import.el [0 β]: A Haskell function and minor mode for interactively adding imports to modules
- taffybar [697 β π]: A gtk based status bar for tiling window managers such as XMonad; now maintained by Ivan Malison
- travitch [1 β]: The code for my Github profile page, which generates this page
- blog [3 β]: The code for my blog (ravit.ch)
- dotfiles [0 β]: A collection of dotfiles managed by Chezmoi