Displaying 1 to 20 from 21 results

mcsema - Framework for lifting x86, amd64, and aarch64 program binaries to LLVM bitcode

  •    C++

McSema is an executable lifter. It translates ("lifts") executable binaries from native machine code to LLVM bitcode. LLVM bitcode is an intermediate representation form of a program that was originally created for the retargetable LLVM compiler, but which is also very useful for performing program analysis methods that would not be possible to perform on an executable binary directly. McSema enables analysts to find and retroactively harden binary programs against security bugs, independently validate vendor source code, and generate application tests with high code coverage. McSema isn’t just for static analysis. The lifted LLVM bitcode can also be fuzzed with libFuzzer, an LLVM-based instrumented fuzzer that would otherwise require the target source code. The lifted bitcode can even be compiled back into a runnable program! This is a procedure known as static binary rewriting, binary translation, or binary recompilation.

decomp - Components of a decompilation pipeline.

  •    Go

The aim of this project is to implement a decompilation pipeline composed of independent components interacting through well-defined interfaces, as further described in the design documents of the project. From a high-level perspective, the components of the decompilation pipeline are conceptually grouped into three modules. Firstly, the front-end translates a source language (e.g. x86 assembly) into LLVM IR; a platform-independent low-level intermediate representation. Secondly, the middle-end structures the LLVM IR by identifying high-level control flow primitives (e.g. pre-test loops, 2-way conditionals). Lastly, the back-end translates the structured LLVM IR into a high-level target programming language (e.g. Go).

llvm-semantics - Formal semantics of LLVM IR in K

  •    LLVM

The goal of this project is to give a complete executable semantics to the LLVM assembly language (LLVM IR). The language is being defined in the K Semantic Framework (version 2.6-2.7).

remill - Library for lifting of x86, amd64, and aarch64 machine code to LLVM bitcode

  •    C++

Remill is a static binary translator that translates machine code instructions into LLVM bitcode. It translates x86 and amd64 machine code (including AVX and AVX512) into LLVM bitcode. AArch64 support is underway. Remill focuses on accurately lifting instructions. It is meant to be used as a library for other tools, e.g. McSema.




llparse - Generating parsers in LLVM IR

  •    Javascript

An API for generating parser in LLVM IR. NOTE: clang 5.0.0 and later crashes on some of the generated output. The fixes were submitted to upstream. Please use -O0 if compilation is crashing/failing until these fixes are landed.

llvm-ir - LLVM IR Builder

  •    Javascript

An API for generating LLVM IR. This software is licensed under the MIT License.

dg - [LLVM Static Slicer] Dependence graph for programs

  •    C++

Dg is a library which implements dependence graphs for programs. It contains a set of generic templates that can be specialized to user's needs. Dg can be used for different analyses, optimizations or program slicing (we currently use it for the last one in our tool called Symbiotic: https://github.com/staticafi/symbiotic). As a part of dg, you can find pointer analyses, reaching definitions analysis and a static slicer for LLVM. Whole project is under developement and lacks documentation for now, so in the case of need, contact us by an e-mail (below).

kllvm - Kotlin library to work with LLVM

  •    Kotlin

KLLVM stands for Kotlin-LLVM. It is intended as a library to work with LLVM in Kotlin. Currently it supports the generation of IR code. The rationale is that there are currently no decent options to use LLVM from the JVM: while there is an autogenerated wrapper of the LLVM C++ API for Java it is unusable. For this reason the best option seems to generate the textual representation of IR code to later compile it to object file (or interpret it directly) using LLVM utilities.


llvm-hs - Haskell bindings for LLVM

  •    Haskell

This project aims to provide a relatively complete set of bindings for the LLVM API. If you find that anything is missing please open an issue! We generally try to stay close to the LLVM C++-API so you can consult the LLVM documentation and reuse existing resources. If you’ve worked with LLVM before, take a look at the examples in the llvm-hs-examples repo. If not, you can find a translation of the official LLVM tutorial at https://github.com/llvm-hs/llvm-hs-kaleidoscope. In general, we try to stay very close to the API and AST provided by LLVM itself, so the LLVM language reference is also very useful.

llvm-hs-pretty - Pretty printer for LLVM AST to Textual IR

  •    LLVM

A pretty printer for llvm-hs-pure. Goal is to be able to pretty print a sufficiently large subset of the LLVM AST from pure Haskell without having to go through the C++ API. There is a single function ppllvm that maps a LLVM.AST.Module to a Text.

llvm-hs-quote - Quasiquoter for LLVM

  •    Haskell

llvm-hs-quote is a quasiquoting-library for llvm-hs. It aims to support all language constructs of LLVM. llvm-hs-quote provides both quasiquotes and antiquotes. The following trivial example uses both a quasiquote and an antiquote.

llvm-hs-typed - Type Safe LLVM IR ( Experimental )

  •    Haskell

An experimental branch of llvm-hs-pure AST that enforces the semantics of correct AST construction using the Haskell type system to prevent malformed ASTs.

P4LLVM - P4-LLVM is an LLVM based compiler for P4

  •    P4

P4LLVM is an LLVM based compiler for P4, a networking language. This project is built upon open-source P4 compiler called p4c. The LLVM IR emitter is a pass over p4c IR. We reuse the p4c front-end and translate p4c IR to LLVM IR.

llvm-brainfuck - Brainfuck compiler based on LLVM API

  •    C++

This is the first step of my journey around LLVM compiler infrastructure. this simple C program is compiled to the following LLVM IR instructions.

doc - Design documents related to the decompilation pipeline.

  •    TeX

This repository contains design documents related to the decompilation pipeline of decomp/decomp. Poster summarizing the current capabilities of the decompilation pipeline.

uc - A compiler for the µC language.

  •    Go

A compiler for the µC programming language. The source code and any original content of this repository is hereby released into the public domain.

tre - LLVM backed progamming language (golang subset)

  •    Go

A LLVM backed Go compiler. tre is built in Go and can compile a subset of Go code to LLVM IR. Clang is used to compile the IR to an executable.

llvm-dbas - LLVM Assembler adding Debug Information at IR Level.

  •    C++

llvm-dbas is an LLVM Assembler adding Debug Information at IR Level. This version is based on LLVM 4.0. A version for LLVM 3.8 is available in a separate branch. When compiling LLVM IR code to machine code, there usually is afterwards no easy way to keep track of which native instructions resulted from which LLVM instruction.

LLAST - low level ast

  •    F#

LLAST provides multiple level representations of LLVM. Usually abstract syntax trees constructed by users in the form of algebraic data types are transformed to LLVM IR.

compiler-touch - Sample of building control flow graph, SSA form, phi nodes, LLVM IR for imagined language

  •    C++

Simple compiler frontend to generate intermediate representation for simple language. The languange consists of integers, mutating variables, cycles and condition statements. Generating LLVM intermediate presentation with power of LLVM Library.