Bap_byteweight_signatures
Interface to the unified storage of signatures.
The signatures a key-value pairs (entries) located in one or more archives. Keys are target/compiler descriptions and values are arbitrary data.
The data types of the signature are described with the Data
module. This library doesn't specify any data types of signature values and they are commonly provided by the libraries that define those data types, e.g., Bap_byteweight.Bytes
.
type error = [
|
`Corrupted of string
Signature file is corrupted
*)|
`No_signatures
Signature file is not found
*)|
`No_entry of string
Corresponding entry not found
*)|
`Sys_error of string
System error has occurred
*) ]
Error conditions
val lookup :
?paths:string list ->
?compiler:Bap_core_theory.Theory.compiler ->
Bap_core_theory.Theory.Target.t ->
'a data ->
('a, error) Core_kernel.Result.t
lookup t f
looks up for the matching entry in the signature database.
The search is performed over the paths
list that is a list of filenames. The first matching entry is selected. If a file in the paths
list doesn't exist then it is skipped. If it exists but unreadable an error is returned.
The paths list is always appended by [default_path; system_path]
, in that specific order.
If compiler
is specified, then only entries that list matching compiler will be selected.
The target matches are performed with the Theory.Target.matches
function.
val update :
?compiler:Bap_core_theory.Theory.compiler ->
Bap_core_theory.Theory.Target.t ->
'a data ->
'a ->
string ->
(unit, error) Core_kernel.Result.t
update t f x path
updates or creates an entry in the signature database.
Removes all entries that match with the specified compiler, target, and data type and adds a new entry with the provided data. All unmatching entries are preserved.
module Data : sig ... end
Interface for declaring signature database data types.
val save :
?comp:string ->
mode:string ->
path:string ->
Bap.Std.arch ->
bytes ->
(unit, error) Core_kernel.Result.t
save ?comp ~mode ~path arch data
store signatures data in the database of signatures specified by the path
parameter.
The triple arch-comp-mode
defines a key for the created entry. If an entry with the same name existed, then it would be overwritten with the new data. If the database, doesn't exist, then it will be created and the specified destination.
val load :
?comp:string ->
?path:string ->
mode:string ->
Bap.Std.arch ->
(bytes, error) Core_kernel.Result.t
load ?comp ?path ~mode arch
finds a signature for the specified arch-comp-path
triple.
If path
is not set, the the signatures are looked up first in default_path
and, if not found, in system_path
.
Since 2.3.0 the path search has changed to look into two locations.
default path for the user's signatures database.
Since 2.3.0 it is pointed to the user-specific location, not to the system-wide. See also system_path
.
val string_of_error : error -> string
a human readable representation of an error.