Module Theory.Label

A program label.

Labels are generalization of addresses and are use to uniquely identify a program location, even if this location is not having an address. Labels are Knowledge objects of the program class, therefore they have the semantics property, accessible via the Program.Semantics.slot.

type t = label

Properties

val addr : (program, Bitvec.t option) KB.slot

the address of the label.

val name : (program, string option) KB.slot

the linkage name of the label

val possible_name : (program, string option KB.opinions) KB.slot

a possible (and opinionated) name.

Use this slot when the name of a program is not really known or when it is possible that other name providers will have a conflicting opinion.

val ivec : (program, int option) KB.slot

the interrupt vector of the label.

Labels could also represent code in interrupt vector routines, therefore the might be referenced by a number, not by an address of a name.

val encoding : (program, language) KB.slot

the program encoding.

The language used to encode the program.

  • since 2.2.0
val aliases : (program, Core_kernel.Set.M(Core_kernel.String).t) KB.slot

possible aliases under which the label might be known.

This may include versioned names, demangled names, etc.

val unit : (program, Unit.t option) KB.slot

a compilation unit (file/library/object) to which this label belongs

target label is the Unit.target of the label's unit.

val is_valid : (program, bool option) KB.slot

a link is valid if it references a valid program.

If a link references a memory location which is not executable, then it is not valid.

val is_subroutine : (program, bool option) KB.slot

a link is subroutine if it is an entry point to a subroutine.

fresh a fresh label (a shortcut for KB.create cls).

  • since 2.4.0
val null : t

null is a shortcut for KB.null cls.

  • since 2.4.0
val for_addr : ?package:string -> Bitvec.t -> t Bap_knowledge.knowledge

for_addr x generates a link to address x.

It is guaranteed that every call for_addr ~package x with the same arguments will return the same label.

The addr property of the created object is set to x.

If the package parameter is not specified then the created object is interned in the currently selected package otherwise it is interned in the provided package.

  • since 2.2.0 the [package] parameter is added
  • since 2.2.0 the object is interned in the currently selected package
val for_name : ?package:string -> string -> t Bap_knowledge.knowledge

for_name x generates a link to program with linkage name x.

It is guaranteed that every call for_name ~package x with the same arguments will return the same label, which is the same object as the Knowledge.Symbol.intern ?package name.

The name property of the created object is set to x.

If the package parameter is not specified then the created object is interned in the currently selected package otherwise it is interned in the provided package.

  • since 2.2.0 the [package] parameter is added
  • since 2.2.0 the object is interned in the currently selected package
val for_ivec : ?package:string -> int -> t Bap_knowledge.knowledge

for_ivec x generates a link to an interrupt service number x.

It is guaranteed that every call for_addr ~package x with the same arguments will return the same label, which is the same object as the Knowledge.Symbol.intern ?package name, where name is sprintf "ivec-%x" x.

The addr property of the created object is set to x.

If the package parameter is not specified then the created object is interned in the currently selected package otherwise it is interned in the provided package.

  • since 2.2.0 the [package] parameter is added
  • since 2.2.0 the object is interned in the currently selected package
include Bap_knowledge.Knowledge.Object.S with type t := t
include Ppx_sexp_conv_lib.Sexpable.S with type t := t
val t_of_sexp : Sexplib0__.Sexp.t -> t
val sexp_of_t : t -> Sexplib0__.Sexp.t
include Base.Comparable.S with type t := t
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 Base__.Or_error.t
type comparator_witness
val comparator : (t, comparator_witness) Base__.Comparator.comparator
val validate_lbound : min:t Base__.Maybe_bound.t -> t Base__.Validate.check
val validate_ubound : max:t Base__.Maybe_bound.t -> t Base__.Validate.check
val validate_bound : min:t Base__.Maybe_bound.t -> max:t Base__.Maybe_bound.t -> t Base__.Validate.check
include Core_kernel.Binable.S with type t := t
val bin_size_t : t Bin_prot.Size.sizer
val bin_write_t : t Bin_prot.Write.writer
val bin_read_t : t Bin_prot.Read.reader
val __bin_read_t__ : (int -> t) Bin_prot.Read.reader
val bin_shape_t : Bin_prot.Shape.t
val bin_writer_t : t Bin_prot.Type_class.writer
val bin_reader_t : t Bin_prot.Type_class.reader
val bin_t : t Bin_prot.Type_class.t