Skip to content

Instantly share code, notes, and snippets.

View ivg's full-sized avatar

Ivan Gotovchits ivg

View GitHub Profile
@ivg
ivg / pv.ml
Last active August 21, 2022 01:48
open Lwt
let block_size = 256 * 4096
let ifd = Lwt_unix.stdin
let ofd = Lwt_unix.stdout
let print spd =
try_lwt
Lwt_io.eprintf "%s\r" (Speed.to_string spd)
with Speed.Undefined -> return_unit
@ivg
ivg / primus_bil.ml
Created June 27, 2018 16:25
Standalone Primus BIL evaluator
open Core_kernel
open Bap.Std
open Bap_primus.Std
open Bap_plugins.Std
open Monads.Std
open Format
let empty_project arch =
let nil = Memmap.empty in
Project.Input.create arch "/bin/true" ~code:nil ~data:nil |>
@ivg
ivg / rewriter.ml
Created March 4, 2021 16:59
A simple binary rewriter using BAP
open Bap.Std
open Core_kernel
open Bap_main
module Unix = UnixLabels
type chunk = {
offset : int;
data : Bigstring.t
}
@ivg
ivg / decode_it.ml
Created November 17, 2021 21:55
decoding LLVM IT instruction
let of_int_exn = function
| 0 -> `EQ
| 1 -> `NE
| 2 -> `CS
| 3 -> `CC
| 4 -> `MI
| 5 -> `PL
| 6 -> `VS
| 7 -> `VC
| 8 -> `HI
@ivg
ivg / extra-thumb2.lisp
Created September 13, 2021 21:27
the semantics of the stm thumb2 instruction
(declare (context (target arm)))
(in-package thumb)
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15)
(stmdb_upd dst base r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15))
(defun t2STMDB_UPD (dst base _pred _?
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14)
@ivg
ivg / lisp_demo.ml
Created January 28, 2021 21:17
implements a `lisp-demo` command in bap that translates lisp programs into BIL programs
open Core_kernel
open Bap.Std
open Bap_core_theory
open Bap_main
open Bap_primus.Std
open KB.Syntax
let show name =
Toplevel.exec @@ begin
@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
@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 / 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 / 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