Module Std.Bili

BIL Interpreter.

bili extends expi with methods for evaluating BIL statements, thus allowing one to interpret BIL AST. To interpret BIL in the intermediate representation use biri.

Also, if you don't need to change the default behavior of the interpreter, then you may use Stmt.eval that exposes an easier interface for BIL evaluation. For example,

      let x = Var.create "x" bool_t;;
      val x : var = x
      let ctxt = Stmt.eval [Bil.(x := int Word.b0)] (new Bili.context);;
      val ctxt : Bili.context = <obj>
      ctxt#bindings |> Seq.to_list;;
      - : (var * Bil.result) list = [(x, [0x1] false)]
class context : object ... end

Bili.context extends Expi.context with PC (Program Counter).

module type S = sig ... end
module Make (M : Monads.Std.Monad.State.S2) : S with type ('a, 'e) state = ('a, 'e) M.t
include S with type ('a, 'e) state = ('a, 'e) Monads.Std.Monad.State.t
type ('a, 'e) state = ('a, 'e) Monads.Std.Monad.State.t
type 'a u = (unit, 'a) state
type 'a r = (Bil.result, 'a) state
module Expi : Expi.S with type ('a, 'e) state = ('a, 'e) state
class 'a t : object ... end

Base class for BIL interpreters