Skip to content

Instantly share code, notes, and snippets.

View ivg's full-sized avatar

Ivan Gotovchits ivg

View GitHub Profile
export CPATH=/opt/local/include
export LIBRARY_PATH=/opt/local/lib
export MANPATH=/opt/local/man
export LDFLAGS='-L/opt/local/lib'
export CPPFLAGS='-I/opt/local/include'
export LD_LIBRARY_PATH=/opt/local/lib
export LD_INCLUDE_PATH=/opt/local/include
@ivg
ivg / broadcaster.mli
Created June 19, 2013 04:07
A simple TCP broadcaster (interface)
val establish: Unix.sockaddr -> Unix.sockaddr -> unit Lwt.t
(** [establish broadcast from] establishes a server, broadcasting
data from address [from] to [broadcast] *)
@ivg
ivg / broadcaster.ml
Created June 19, 2013 04:05
A simple TCP broadcaster
open Lwt
let establish saddr caddr =
let open Lwt_io in
let str,push = Lwt_stream.create () in
let client (g,p) =
let rec loop () = write_chars p str >> loop () in
ignore_result (loop ()) in
let hsrv = establish_server saddr client in
lwt g,p = open_connection caddr in
@ivg
ivg / Vagrantfile
Created September 22, 2016 19:34
Bap Vagrant file with byteweight
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
@ivg
ivg / scrabble.ml
Created December 6, 2016 00:14
find all possible dictionary words that can be built from a given set of characters
(*
1. install opam
2. install core_kernel library: `opam install core_kernel`
3. build with `ocamlbuild -pkg core_kernel scabble.native`
4. run as `./scrabble.native /usr/share/dict/american-english`
*)
open Core_kernel.Std
open Format
@ivg
ivg / Vagrant
Created September 26, 2017 13:34
BAP Vagrant file with the emacs development environment
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
end
config.vm.provision "shell", privileged: false, inline: <<-SHELL
sudo add-apt-repository --yes ppa:avsm/ppa
sudo apt-get update
sudo apt-get --yes install opam
opam init --auto-setup --comp=4.02.3 --yes
@ivg
ivg / cyclomatic.ml
Created September 27, 2017 12:22
Computes cyclomatic complexity of all functions in a binary Raw
open Core_kernel.Std
open Bap.Std
open Graphlib.Std
module G = Graphs.Cfg
let complexity graph =
let edges = Seq.length (G.edges graph) in
let nodes = Seq.length (G.nodes graph) in
let parts = Graphlib.strong_components (module G) graph |>
@ivg
ivg / path_check.ml
Created September 27, 2017 12:27
Verifies a safety condition on all paths
open Core_kernel.Std
open Bap.Std
open Graphlib.Std
open Format
include Self()
module CG = Graphs.Callgraph
module CFG = Graphs.Tid
module DAG = Graphlib.Make(Tid)(Unit)
@ivg
ivg / cyclomatic.py
Created September 27, 2017 12:20
Computes cyclomatic complexity of all functions in a binary
import bap
import networkx as nx
def build_cfg(sub):
G = nx.DiGraph()
entry = sub.blks[0].id.number
G.add_node(entry)
for blk in sub.blks:
for jmp in blk.jmps:
if jmp.constr == 'Goto' and jmp.target.constr == 'Direct':
open Core_kernel
open Bap.Std
open Bap_primus.Std
open Bap_taint.Std
open Format
include Self()
type state = {
path_taints : Taint.Object.Set.t
}