package bap-std

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Regular interface for BIL expressions

type t = Bil.exp
class state : object ... end

All visitors provide some information about the current position of the visitor

class 'a visitor : object ... end

expression visitor.

class 'a finder : object ... end

A visitor with shortcut. Finder is a specialization of a visitor, that uses return as its folding argument. At any time you can stop the traversing by calling return function of the provided argument (which is by itself is a record with one field - a function accepting argument of type 'a option).

class mapper : object ... end

Exp mapper. By default performs deep identity mapping. Non-leaf methods deconstructs terms, calls corresponding methods on its parts and the constructs it back. So if you're overriding a non-leaf method, then make sure that you called the parent method if you want a normal traversal.

val fold : 'a visitor -> init:'a -> t -> 'a

fold visitor ~init exp traverse the exp tree with provided visitor. For example, the following will collect all address that are accessed with a load operation: { let collect_load_addresses = Exp.fold ~init:[] (object inherit [word list] Bil.visitor method! enter_load ~mem ~addr _ _ addrs = match addr with | Bil.Int addr -> addr :: addrs | _ -> addrs end) } See also Bil.fold and Stmt.fold

val iter : unit visitor -> t -> unit

iter visitor exp iterates over all terms of the exp using provided visitor. See also Bil.iter and Stmt.iter

val find : 'a finder -> t -> 'a option

find finder exp returns Some thing if finder finds some thing. See also Bil.find and Stmt.find

val map : mapper -> t -> t

map mapper exp maps exp tree using provided mapper. See also Bil.map

val exists : unit finder -> t -> bool

exists finder exp is true if finder finds something. See also Bil.exists and Stmt.exists

val is_referenced : var -> t -> bool

is_referenced x exp true if exp contains Var x on one of its leafs. See also Bil.is_referenced and Stmt.is_referenced

val normalize_negatives : t -> t

normalize_negatives exp returns an exp where all negative additions are substituted by subtractions. See Bil.normalize_negatives for more details

val fold_consts : t -> t

fold_consts performs one step of constant evaluation. In order to perform all possible reductions one should use fixpoint function, provided later. Example: let x = Bil.var (Var.create "x" reg32_t) fixpoint fold_consts Bil.(x lxor x lxor x lxor x)

will yield 0x0:32, but without a fixpoint, the result would be just:

fold_constants Bil.(x lxor x lxor x lxor x) (0x0:32 ^ x) ^ x.

See also Bil.fold_consts

val fixpoint : (t -> t) -> t -> t

fixpoint f applies transformation f to t until it reaches a fixpoint, i.e., such point x that f x = f (f x). See also Bil.fixpoint and Stmt.fixpoint

val free_vars : t -> Var.Set.t

free_vars exp returns a set of all unbound variables, that occurs in the expression exp.

val eval : exp -> Bil.value

eval x evaluate expression x to a value.

include Regular.Std.Regular.S with type t := t
val t_of_sexp : Sexplib.Sexp.t -> t
val sexp_of_t : t -> Sexplib.Sexp.t
val bin_t : t Core_kernel.Std.Bin_prot.Type_class.t
val bin_read_t : t Core_kernel.Std.Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Core_kernel.Std.Bin_prot.Read.reader
val bin_reader_t : t Core_kernel.Std.Bin_prot.Type_class.reader
val bin_size_t : t Core_kernel.Std.Bin_prot.Size.sizer
val bin_write_t : t Core_kernel.Std.Bin_prot.Write.writer
val bin_writer_t : t Core_kernel.Std.Bin_prot.Type_class.writer
val to_string : t -> string
val str : unit -> t -> string
val pps : unit -> t -> string
val ppo : Core_kernel.Std.out_channel -> t -> unit
val pp_seq : Format.formatter -> t Core_kernel.Std.Sequence.t -> unit
val pp : Format.formatter -> t -> unit
val (>=) : t -> t -> bool
val (<=) : t -> t -> bool
val (=) : t -> t -> bool
val (>) : t -> t -> bool
val (<) : t -> t -> bool
val (<>) : t -> t -> bool
val equal : t -> t -> bool
val compare : t -> t -> int
val min : t -> t -> t
val max : t -> t -> t
val ascending : t -> t -> int
val descending : t -> t -> int
val between : t -> low:t -> high:t -> bool
val clamp_exn : t -> min:t -> max:t -> t
val clamp : t -> min:t -> max:t -> t Core_kernel.Or_error.t
module Replace_polymorphic_compare : sig ... end
type comparator_witness
val validate_lbound : min:t Core_kernel.Maybe_bound.t -> t Core_kernel.Validate.check
val validate_ubound : max:t Core_kernel.Maybe_bound.t -> t Core_kernel.Validate.check
val validate_bound : min:t Core_kernel.Maybe_bound.t -> max:t Core_kernel.Maybe_bound.t -> t Core_kernel.Validate.check
val comparator : (t, comparator_witness) Core_kernel.Comparator.comparator
module Map : sig ... end
module Set : sig ... end
val hash : t -> int
val hashable : t Core_kernel.Std.Hashable.Hashtbl.Hashable.t
module Table : sig ... end
module Hash_set : sig ... end
module Hash_queue : sig ... end
type info = string * [ `Ver of string ] * string option
val version : string
val size_in_bytes : ?ver:string -> ?fmt:string -> t -> int
val of_bytes : ?ver:string -> ?fmt:string -> Regular.Std.bytes -> t
val to_bytes : ?ver:string -> ?fmt:string -> t -> Regular.Std.bytes
val blit_to_bytes : ?ver:string -> ?fmt:string -> Regular.Std.bytes -> t -> int -> unit
val of_bigstring : ?ver:string -> ?fmt:string -> Core_kernel.Std.bigstring -> t
val to_bigstring : ?ver:string -> ?fmt:string -> t -> Core_kernel.Std.bigstring
val blit_to_bigstring : ?ver:string -> ?fmt:string -> Core_kernel.Std.bigstring -> t -> int -> unit
module Io : sig ... end
module Cache : sig ... end
val add_reader : ?desc:string -> ver:string -> string -> t Regular.Std.reader -> unit
val add_writer : ?desc:string -> ver:string -> string -> t Regular.Std.writer -> unit
val available_readers : unit -> info list
val default_reader : unit -> info
val set_default_reader : ?ver:string -> string -> unit
val with_reader : ?ver:string -> string -> (unit -> 'a) -> 'a
val available_writers : unit -> info list
val default_writer : unit -> info
val set_default_writer : ?ver:string -> string -> unit
val with_writer : ?ver:string -> string -> (unit -> 'a) -> 'a
val default_printer : unit -> info option
val set_default_printer : ?ver:string -> string -> unit
val with_printer : ?ver:string -> string -> (unit -> 'a) -> 'a
val find_reader : ?ver:string -> string -> t Regular.Std.reader option
val find_writer : ?ver:string -> string -> t Regular.Std.writer option
val pp_adt : t Regular.Std.printer
OCaml

Innovation. Community. Security.