Machine.MakeMake(Monad) a monad transformer that wraps the Machine into an arbitrary Monad.
module M : Monads.Std.Monad.Smodule Observation : sig ... endObservations interface.
module Syntax : sig ... endComputation Syntax.
include Monads.Std.Monad.State.Multi.S
with type 'a t := 'a t
and type 'a m := 'a M.t
and type env := Bap.Std.project
and type id := id
and module Syntax := Syntax
and type 'a e =
?boot:unit t ->
?init:unit t ->
?fini:unit t ->
(exit_status * Bap.Std.project) M.t effectinclude Monads.Std.Monad.Trans.S
with type 'a t := 'a t
with type 'a m := 'a M.t
with type 'a e =
?boot:unit t ->
?init:unit t ->
?fini:unit t ->
(exit_status * Bap.Std.project) M.t effecttype 'a e =
?boot:unit t ->
?init:unit t ->
?fini:unit t ->
(exit_status * Bap.Std.project) M.t effectmodule Id : Core_kernel.Identifiable.S with type t = idval global : idthe identifier of the global (initial) state.
val fork : unit -> unit tfork () forks the current state.
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
ancestor ids returns an identifier of the closest common ancestor of states with the given identifiers.
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 status : id -> Monads.Std.Monad.State.Multi.status tstatus 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.t
with type env := Bap.Std.project
with module Syntax := Syntaxinclude Monads.Std.Monad.Monad
with type 'a t := 'a t
with module Syntax := Syntaxsequence xs computes a sequence of computations xs in the left to right order.
module Fn : sig ... endVarious function combinators lifted into the Kleisli category.
module Pair : sig ... endThe pair interface lifted into the monad.
module Triple : sig ... endThe triple interface lifted into a monad.
module Lift : sig ... endLifts functions into the monad.
module Exn : sig ... endInteracting between monads and language exceptions
module Collection : sig ... endLifts collection interface into the monad.
module List : Collection.S with type 'a t := 'a listThe Monad.Collection.S interface for lists
module Seq : Collection.S with type 'a t := 'a Core_kernel.Sequence.tThe Monad.Collection.S interface for sequences
include Monads.Std.Monad.Syntax.S with type 'a t := 'a tval (!!) : 'a -> 'a t!!x is return x
!$$$$f is Lift.quaternary f
include Monads.Std.Monad.Syntax.Let.S with type 'a t := 'a tinclude Core_kernel.Monad.S with type 'a t := 'a tmodule Monad_infix : sig ... endval return : 'a -> 'a tmodule Let_syntax : sig ... endmodule Let : Monads.Std.Monad.Syntax.Let.S with type 'a t := 'a tMonadic operators, see Monad.Syntax.S for more.
val put : Bap.Std.project -> unit tput s changes the current state to s
val get : unit -> Bap.Std.project tget s gets the current state
val gets : (Bap.Std.project -> 'r) -> 'r tgets p projects the current state with the function p
val update : (Bap.Std.project -> Bap.Std.project) -> unit tupdate f updates the current state with the function f
Global state shared across all machine clones.
module Other : sig ... endLocal 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 tproject 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 tprogram program representation.
The same as gets Project.program.
val arch : Bap.Std.arch tarch code architecture.
The same as gets Project.arch.
val args : string array targs program command line arguments.
val envp : string array tenvp program environment variables.