Module Pulselib.PulseBaseDomain
module Memory = PulseBaseMemory
type t
=
{
heap : PulseBaseMemory.t;
stack : PulseBaseStack.t;
attrs : PulseBaseAddressAttributes.t;
}
type cell
= PulseBaseMemory.Edges.t * PulseBasicInterface.Attributes.t
val empty : t
val reachable_addresses : ?var_filter:(IR.Var.t -> bool) -> t -> Pulselib.PulseBasicInterface.AbstractValue.Set.t
compute the set of abstract addresses that are "used" in the abstract state, i.e. reachable from the stack variables
val reachable_addresses_from : PulseBasicInterface.AbstractValue.t Stdlib.Seq.t -> t -> Pulselib.PulseBasicInterface.AbstractValue.Set.t
compute the set of abstract addresses that are reachable from given abstract addresses
val empty_mapping : mapping
type isograph_relation
=
|
NotIsomorphic
no mapping was found that can make LHS the same as the RHS
|
IsomorphicUpTo of mapping
mapping(lhs)
is isomorphic torhs
val isograph_map : lhs:t -> rhs:t -> mapping -> isograph_relation
val is_isograph : lhs:t -> rhs:t -> mapping -> bool
val find_cell_opt : PulseBasicInterface.AbstractValue.t -> t -> cell option
val pp : F.formatter -> t -> unit
val subst_var : (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.AbstractValue.t) -> t -> t PulseBasicInterface.SatUnsat.t
module GraphVisit : sig ... end