Make.Machine
module Observation : sig ... end
Observations interface.
module Syntax : sig ... end
Computation Syntax.
include Monads.Std.Monad.State.Multi.S
with type 'a t := 'a t
and type 'a m := 'a m
and type env := Bap.Std.project
and type id := Machine.id
and module Syntax := Syntax
and type 'a e =
?boot:unit t ->
?init:unit t ->
?fini:unit t ->
(exit_status * Bap.Std.project) m effect
include Monads.Std.Monad.Trans.S
with type 'a t := 'a t
with type 'a m := 'a m
with type 'a e =
?boot:unit t ->
?init:unit t ->
?fini:unit t ->
(exit_status * Bap.Std.project) m effect
type 'a e =
?boot:unit t ->
?init:unit t ->
?fini:unit t ->
(exit_status * Bap.Std.project) m effect
module Id : Core_kernel.Identifiable.S with type t = Machine.id
val global : Machine.id
the identifier of the global (initial) state.
val fork : unit -> unit t
fork ()
forks the current state.
val switch : Machine.id -> unit t
switch id
switches to the state with the given id
if such state is alive, otherwise switches to the closest alive ancestor of the state with the given id
val parent : unit -> Machine.id t
parent ()
returns an identifier of the closest alive parent.
val ancestor : Machine.id list -> Machine.id t
ancestor ids
returns an identifier of the closest common ancestor of states with the given identifiers.
val current : unit -> Machine.id t
current id
returns an identifier of current state.
val kill : Machine.id -> unit t
kill id
kills a state with the specified id
. If id
corresponds to the current state, then switches to the closest ancestor. If id = global
then do nothing.
val forks : unit -> Machine.id Core_kernel.Sequence.t t
forks xs
returns a sequence of all alive states
val status : Machine.id -> Monads.Std.Monad.State.Multi.status t
status id
returns a status of a state with the given id
include Monads.Std.Monad.State.S
with type 'a t := 'a t
and type 'a e := 'a e
and type 'a m := 'a m
with type env := Bap.Std.project
with module Syntax := Syntax
include Monads.Std.Monad.Monad
with type 'a t := 'a t
with module Syntax := Syntax
sequence xs
computes a sequence of computations xs
in the left to right order.
module Fn : sig ... end
Various function combinators lifted into the Kleisli category.
module Pair : sig ... end
The pair interface lifted into the monad.
module Triple : sig ... end
The triple interface lifted into a monad.
module Lift : sig ... end
Lifts functions into the monad.
module Exn : sig ... end
Interacting between monads and language exceptions
module Collection : sig ... end
Lifts collection interface into the monad.
module List : Collection.S with type 'a t := 'a list
The Monad.Collection.S interface for lists
module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.t
The Monad.Collection.S interface for sequences
include Monads.Std.Monad.Syntax.S with type 'a t := 'a t
val (!!) : 'a -> 'a t
!!x
is return x
!$$$$f
is Lift.quaternary f
include Monads.Std.Monad.Syntax.Let.S with type 'a t := 'a t
include Core_kernel.Monad.S with type 'a t := 'a t
module Monad_infix : sig ... end
val return : 'a -> 'a t
module Let_syntax : sig ... end
module Let : Monads.Std.Monad.Syntax.Let.S with type 'a t := 'a t
Monadic operators, see Monad.Syntax.S for more.
val put : Bap.Std.project -> unit t
put s
changes the current state to s
val get : unit -> Bap.Std.project t
get s
gets the current state
val gets : (Bap.Std.project -> 'r) -> 'r t
gets p
projects the current state with the function p
val update : (Bap.Std.project -> Bap.Std.project) -> unit t
update f
updates the current state with the function f
module Local :
Machine.State with type 'a m := 'a t and type 'a t := 'a Machine.state
Local state of the machine.
module Global :
Machine.State with type 'a m := 'a t and type 'a t := 'a Machine.state
Global state shared across all machine clones.
module Other : sig ... end
Local state of other machines.
raise exn
raises the machine exception exn
, intiating an abonormal control flow
catch x f
creates a computation that is equal to x
if it terminates normally, and to f e
if x
terminates abnormally with the exception e
.
val project : Bap.Std.project t
project
is a computation that results with the project data structure. Note, that Machine is a State monad with the env
type equal to project
, thus project
is a shortcut to get ()
.
This function is always evaluated in the global context, i.e., there is only one project that is shared by all machine forks.
You can use put project
to update the project data structure.
val program : Bap.Std.program Bap.Std.term t
program
program representation.
The same as gets Project.program
.
val arch : Bap.Std.arch t
arch
code architecture.
The same as gets Project.arch
.
val args : string array t
args
program command line arguments.
val envp : string array t
envp
program environment variables.