Skip to content

Instantly share code, notes, and snippets.

View ivg's full-sized avatar

Ivan Gotovchits ivg

View GitHub Profile
@ivg
ivg / turing.v
Created June 21, 2018 13:19 — forked from casperbp/turing.v
Coq implementation of a Turing Machine
(*** Turing Machines in Coq *)
(** Some preliminary types we'll use *)
CoInductive CoList (A: Type) := CONS (a:A) (t:CoList A) | NIL.
Arguments CONS [A] _ _.
Arguments NIL [A].
CoInductive Delay A := HERE (a:A) | LATER (_:Delay A).
@ivg
ivg / peval.ml
Created October 19, 2018 13:48
running Primus interpreter in a custom mode
(*
Computes an expression using Primus. Showcases how to bootstrap the whole Primus machinery and how
to store and extract results of computations from the project data structure.
To compile, put this file in an empty folder and run the following commands:
$ bapbuild -pkg bap-primus peval.plugin
$ bapbundle instll peval.plugin
@ivg
ivg / ddtbd-debug.recipe
Last active March 16, 2019 08:41
Double Dereferences under Tainted Branch Detector
(extend ddtbd)
;; debugging stuff
(option primus-propagate-taint-to-attributes)
(option print-bir-attr tainted-reg)
(option print-bir-attr tainted-ptr)
(option print-bir-attr tainted-regs)
(option print-bir-attr tainted-ptrs)
(option dump bir:out.bir)
(option primus-print-obs enter-term read)
@ivg
ivg / combs.ml
Last active May 2, 2019 16:55
folding over all combinations
(* a simple iterator, using the for loop, note that it counts objects starting from 1. *)
let iter_combs n k f =
let rec gen v s j =
if j > k then f v
else for i = s to n do
gen (i::v) (i+1) (j+1)
done in
gen [] 1 1
@ivg
ivg / bap.deps
Last active July 11, 2019 14:15
bap deps (as of Jul 2019)
opam-version: "2.0"
compiler: [
"base-bigarray.base"
"base-threads.base"
"base-unix.base"
"ocaml-base-compiler.4.07.0"
]
roots: [
"bap-signatures.1.5.0"
"base.v0.11.1"
@ivg
ivg / ppx-tree.ml
Created May 8, 2019 13:21
A tree representation for ppx
open Core_kernel
module Ast = struct
type ident = string [@@deriving compare, hash, sexp]
type t =
| Var of ident
| Int of int
| Let of ident * t * t
| App of ident * t list
@ivg
ivg / mips.ml
Created March 9, 2017 19:55
Minimal MIPS lifter for BAP
open Core_kernel.Std
open Bap.Std
open Or_error.Monad_infix
module Insn = Disasm_expert.Basic.Insn
module Mips = struct
(** Defines the register map *)
module CPU = struct
let mem = Var.create "mem" @@ mem32_t `r8
@ivg
ivg / toy.ml
Created April 16, 2020 16:05
A lifter for the toy language
open Core_kernel
open Bap_core_theory
open Bap.Std
open KB.Syntax
include Self()
module Word = struct
include Bitvec_order
include Bitvec_sexp.Functions
end
@ivg
ivg / bytoy.ml
Last active August 12, 2020 15:41
Lifting a toy bytecode using Core Theory
open Core_kernel
open Bap_core_theory
open Bap.Std
open KB.Syntax
include Self()
let package = "bytoy"
type name = string [@@deriving equal,sexp]
type oper = Reg of int | Imm of int [@@deriving equal,sexp]
@ivg
ivg / knowledge_explorer.ml
Created August 25, 2020 22:51
A simple example that shows how to explore the knowledge base.
open Core_kernel
open Bap_main
open Bap_knowledge
open Bap_core_theory
open Bap.Std
open KB.Syntax
let zero_collector = object
inherit [Tid.Set.t] Term.visitor