1

Program Analysis Resources

 8 months ago
source link: https://gist.github.com/MattPD/00573ee14bf85ccac6bed3c0678ddbef
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Instantly share code, notes, and snippets.

Last active January 3, 2024 11:04
Program Analysis Resources (WIP draft)

Program Analysis Resources

(draft; work in progress)

See also:

General

Symbolic Execution

Symbolic Execution: Software

Lectures & Courses

  • CMPUT 416: Foundations of Program Analysis

  • DECA: Designing Code Analyses for Large-scale Software Systems

  • Foundations of Programming Languages

  • Static Program Analysis
  • 25 Years of Program Analysis

  • Software Analysis

  • Software Analysis and Testing

  • Program Analysis and Reliability - Nick Sumner, CMPT 886, Spring 2015, SFU

  • Program analysis for reverse engineers: from T to ⊥

  • CS 252r: Advanced Topics in Programming Languages

  • A Gentle Introduction to Program Analysis
  • UFMG DCC888: Static Program Analysis

Software

LLVM - Symbolic Execution

  • haybale: Symbolic execution of LLVM IR with an engine written in Rust
  • KLEE Symbolic Virtual Machine

  • SymCC: efficient compiler-based symbolic execution

LLVM - Verification

Clang

Clang Static Analyzer

Introduction

Introduction: LLVM IR

Instrumentation

  • Creating an LLVM Sanitizer from Hopes and Dreams

  • Instrew: Leveraging LLVM for High Performance Dynamic Binary Instrumentation

  • Loom: LLVM instrumentation library
  • PolyTracker: An LLVM-based instrumentation tool for universal taint analysis.

  • QBDI (QuarkslaB Dynamic binary Instrumentation): A Dynamic Binary Instrumentation framework based on LLVM

  • sbt-instrumentation: Configurable instrumentation of LLVM bitcode

Lifting

Lifting: Disassembly, Decompilation, Recompilation, Reverse Engineering

  • ANVILL Decompiler Toolchain
  • decomp: Compositional Decompilation using LLVM IR

  • llvm-mctoll

  • McSema: Framework for lifting x86, amd64, and aarch64 program binaries to LLVM bitcode

  • Rellic: produces goto-free C output from LLVM bitcode
  • Rellume — Lifts x86-64 to LLVM IR
    • https://github.com/aengelke/rellume
    • Rellume is a lifter for x86-64 machine code to LLVM IR with focus on the performance of the lifted code. The generated LLVM IR can be compiled and executed again, for example using LLVM's JIT compiler, ideally having the same (or even better) performance as the original code.
  • Remill: Library for lifting of x86, amd64, and aarch64 machine code to LLVM bitcode
  • reopt: A tool for analyzing x86-64 binaries. - https://github.com/GaloisInc/reopt
    • Reopt is a tool under development for decompiling and recompiling code. It works by mapping binaries into LLVM byte code, using the LLVM optimization passes to optimize the LLVM, and then combining the newly generated into the binary to generate a new executable.
    • reopt-vcg: an in-progress Lean4 prototype LLVM/x86 equivalence checker for programs optimized by reopt.
  • RetDec: a retargetable machine-code decompiler based on LLVM

  • revng: a static binary translator
    • revng is a static binary translator. Given a input ELF binary for one of the supported architectures (currently MIPS, ARM and x86-64) it will analyze it and emit an equivalent LLVM IR. To do so, revng employs the QEMU intermediate representation (a series of TCG instructions) and then translates them to LLVM IR.
    • https://rev.ng/
    • https://github.com/revng/revng

Passes

Legacy Pass Manager
New Pass Manager

Readings

Background

Background: Notation

Background: Semantics

  • Programming Language Semantics: It’s Easy As 1,2,3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK