Next: Introduction, Previous: (dir), Up: (dir) [Contents][Index]
This is the gtirb Reference Manual, generated automatically by Declt version 3.0 "Montgomery Scott" on Tue Dec 22 13:39:13 2020 GMT+0.
• Introduction | What gtirb is all about | |
• Systems | The systems documentation | |
• Modules | The modules documentation | |
• Files | The files documentation | |
• Packages | The packages documentation | |
• Definitions | The symbols documentation | |
• Indexes | Concepts, functions, variables and data types |
The Common Lisp API for GrammaTech's IR for Binaries (GTIRB). GTIRB is a data structure designed to support the analysis and rewriting of binary executables. There are a number of tools that produce, process and consume GTIRB. See the following for more information on GTIRB:
Hopefully, eventually, it will be possible to install everything by
(1) installing
Protobuf, version
3.7.0 or later, and then (2) installing this Common Lisp GTIRB library
with QuickLisp (ql:quickload :gtirb)
.
We're a ways away from that currently. So after you've installed
Protobuf, you should clone and install the Common Lisp PROTOBUF
package manually according to the instructions at
https://github.com/brown/protobuf
ensuring that the protoc-gen-lisp
executable has been built and is
on your path. At that point you should be able to load the GTIRB
package.
The Common Lisp API attempts to provide access to the underlying GTIRB
data-structure described above in idiomatic common lisp. The main
Protobuf data structures are wrapped in CLOS objects. All fields are
modifiable with setf
. Invariant are maintained automatically by the
API, e.g. using :around
methods.
In some cases accessors are provided beyond the fields directly
present in the Protobuf. For example, every GTIRB element has a UUID
(which supports referencing elements from AuxData tables). The Common
Lisp API provides uniform access to any element through the get-uuid
method which operates similarly to gethash
only it may be called on
any top-level GTIRB IR
object (which itself maintains a hash of
every contained element by UUID).
The GTIRB CFG is represented as a graph using the Common Lisp graph library from https://github.com/eschulte/graph. This simple representation should promote easy exploration and modification of the control flow graph, and the many graph analysis functions defined in that library may be directly applied to the CFG. Every node of the graph holds the UUID for a code block.
The bytes of any code and data block may be accessed by calling the
bytes
method, which provides directly access to the bytes of the
block's byte-interval
.
See the test suite for a large number of basic usage examples. However, the following gives a simple usage example.
From the command-line. Use the datalog disassembler ddisasm
to
disassemble the ls
executable into a GTIRB instance.
ddisasm --ir $(which ls) /tmp/ls.gtirb
From the Common Lisp REPL. Load the GTIRB API, and then load the GTIRB instance created in step (1) into a common lisp GTIRB object.
(ql:quickload :gtirb)
(use-package :gtirb)
(defparameter ls (read-gtirb "/tmp/ls.gtirb"))
At this point you can explore the CFG, perform analyses, or even modify the contents of the GTIRB object. Results of analyses may be saved into new AuxData tables which become part of the GTIRB object for later use by other sessions or by other tools potentially written in other languages.
;; Do stuff with the GTIRB, maybe make changes.
Finally, the resulting GTIRB object may be written back to the file system.
(write-gtirb ls "/tmp/ls-modified.gtirb")
At the command line. A new executable may be created from the
modified gtirb file using the gtirb-pprinter
.
gtirb-pprinter --ir /tmp/ls-modified.gtirb --binary /tmp/ls-modified
Next: Modules, Previous: Introduction, Up: Top [Contents][Index]
The main system appears first, followed by any subsystem dependency.
• The gtirb system | ||
• The gtirb/gtirb system | ||
• The gtirb/ranged system | ||
• The gtirb/utility system | ||
• The proto system |
Next: The gtirb/gtirb system, Previous: Systems, Up: Systems [Contents][Index]
GrammaTech
MIT
Common Lisp library for GTIRB
A Common Lisp front end to the GrammaTech
Intermediate Representation for Bianries (GTIRB). GTIRB is
serialized using Google’s protocol buffers. This library wraps the
raw protocol buffer serialization with a more Lispy interface.
asdf-package-system
gtirb/gtirb (system)
gtirb.asd (file)
Next: The gtirb/ranged system, Previous: The gtirb system, Up: Systems [Contents][Index]
GrammaTech
MIT
gtirb.asd (file)
lisp.lisp (file)
Next: The gtirb/utility system, Previous: The gtirb/gtirb system, Up: Systems [Contents][Index]
GrammaTech
MIT
cl-interval
gtirb.asd (file)
lisp.lisp (file)
Next: The proto system, Previous: The gtirb/ranged system, Up: Systems [Contents][Index]
GrammaTech
MIT
gtirb.asd (file)
lisp.lisp (file)
Previous: The gtirb/utility system, Up: Systems [Contents][Index]
GrammaTech
MIT
Common Lisp interface to GTIRB protobuf files
protobuf
gtirb.asd (file)
Modules are listed depth-first from the system components tree.
• The proto/proto module |
proto (system)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/
Files are sorted by type and then listed depth-first from the systems components trees.
• Lisp files | ||
• Static files |
Next: Static files, Previous: Files, Up: Files [Contents][Index]
Next: The gtirb/gtirb/lisp․lisp file, Previous: Lisp files, Up: Lisp files [Contents][Index]
gtirb.asd
Next: The gtirb/ranged/lisp․lisp file, Previous: The gtirb․asd file, Up: Lisp files [Contents][Index]
gtirb/gtirb (system)
gtirb.lisp
Next: The gtirb/utility/lisp․lisp file, Previous: The gtirb/gtirb/lisp․lisp file, Up: Lisp files [Contents][Index]
gtirb/ranged (system)
ranged.lisp
Next: The proto/proto/auxdata․lisp file, Previous: The gtirb/ranged/lisp․lisp file, Up: Lisp files [Contents][Index]
gtirb/utility (system)
utility.lisp
Next: The proto/proto/byteinterval․lisp file, Previous: The gtirb/utility/lisp․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/AuxData.lisp
Next: The proto/proto/cfg․lisp file, Previous: The proto/proto/auxdata․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/ByteInterval.lisp
Next: The proto/proto/codeblock․lisp file, Previous: The proto/proto/byteinterval․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/CFG.lisp
Next: The proto/proto/datablock․lisp file, Previous: The proto/proto/cfg․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/CodeBlock.lisp
Next: The proto/proto/ir․lisp file, Previous: The proto/proto/codeblock․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/DataBlock.lisp
Next: The proto/proto/module․lisp file, Previous: The proto/proto/datablock․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/IR.lisp
Next: The proto/proto/proxyblock․lisp file, Previous: The proto/proto/ir․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/Module.lisp
Next: The proto/proto/section․lisp file, Previous: The proto/proto/module․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/ProxyBlock.lisp
Next: The proto/proto/symbol․lisp file, Previous: The proto/proto/proxyblock․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/Section.lisp
Next: The proto/proto/symbolicexpression․lisp file, Previous: The proto/proto/section․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/Symbol.lisp
Previous: The proto/proto/symbol․lisp file, Up: Lisp files [Contents][Index]
proto (module)
/home/quickref/quicklisp/dists/quicklisp/software/gtirb-quicklisp-dd18337d-git/proto/SymbolicExpression.lisp
Previous: Lisp files, Up: Files [Contents][Index]
• The proto/readme.md file |
Previous: Static files, Up: Static files [Contents][Index]
proto (system)
README.md
Next: Definitions, Previous: Files, Up: Top [Contents][Index]
Packages are listed by definition order.
• The gtirb/gtirb package | ||
• The gtirb/ranged package | ||
• The gtirb/utility package |
Next: The gtirb/ranged package, Previous: Packages, Up: Packages [Contents][Index]
lisp.lisp (file)
gtirb
Next: The gtirb/utility package, Previous: The gtirb/gtirb package, Up: Packages [Contents][Index]
lisp.lisp (file)
common-lisp
Previous: The gtirb/ranged package, Up: Packages [Contents][Index]
lisp.lisp (file)
common-lisp
Definitions are sorted by export status, category, package, and then by lexicographic order.
• Exported definitions | ||
• Internal definitions |
Next: Internal definitions, Previous: Definitions, Up: Definitions [Contents][Index]
• Exported constants | ||
• Exported special variables | ||
• Exported functions | ||
• Exported generic functions | ||
• Exported conditions | ||
• Exported classes |
Next: Exported special variables, Previous: Exported definitions, Up: Exported definitions [Contents][Index]
GTIRB Version as a string of "MAJOR.MINOR.PATCH".
lisp.lisp (file)
GTIRB Protobuf Version as a non-negative integer.
lisp.lisp (file)
Next: Exported functions, Previous: Exported constants, Up: Exported definitions [Contents][Index]
Compare equality verbosely in the ‘is-equal-p’ function.
This may be useful to print contextual information when an equality
comparison fails for a large object with many nested objects.
lisp.lisp (file)
When true, (setf bytes) preserves symbolic expressions intersecting the assigned part of the object.
lisp.lisp (file)
Next: Exported generic functions, Previous: Exported special variables, Up: Exported definitions [Contents][Index]
Force ARRAY into a byte array.
lisp.lisp (file)
lisp.lisp (file)
Return t if LEFT and RIGHT are equal.
Recursively descend into any sub-structure. Custom recursive equality
predicates are defined for common Common Lisp data structures as well
as all GTIRB structures.
lisp.lisp (file)
lisp.lisp (file)
Return a new random UUID.
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Write a GTIRB IR object to PATH.
lisp.lisp (file)
Write OBJECT to PATH.
lisp.lisp (file)
Next: Exported conditions, Previous: Exported functions, Up: Exported definitions [Contents][Index]
lisp.lisp (file)
lisp.lisp (file)
Optionally specify the address in memory at which this
~ byte-interval should start. Byte-intervals without address could
exist anywhere in memory.
lisp.lisp (file)
lisp.lisp (file)
Return any address range of the PROTO-BACKED-OBJECT GTIRB object.
lisp.lisp (file)
Does this byte-interval have an address.
lisp.lisp (file)
Find all objects in OBJECT starting at ADDRESS.
lisp.lisp (file)
lisp.lisp (file)
A-list of auxiliary data objects keyed by string name.
Aux-Data tables may hold structured or unstructured data. This data
may refer to elements of the GTIRB IR through uuids. Information
relevant to a particular module will be stored in Aux-Data tables
accessible from the specific module. Aux-Data tables only exist on
modules and on GTIRB IR instances.
lisp.lisp (file)
A-list of auxiliary data objects keyed by string name.
Aux-Data tables may hold structured or unstructured data. This data
may refer to elements of the GTIRB IR through uuids. Information
relevant to a particular module will be stored in Aux-Data tables
accessible from the specific module. Aux-Data tables only exist on
modules and on GTIRB IR instances.
lisp.lisp (file)
Access the structured representation of AUX-DATAs data.
lisp.lisp (file)
(setf aux-data-data) (generic function)
aux-data-data (generic function)
lisp.lisp (file)
Access the structured type of AUX-DATA.
lisp.lisp (file)
(setf aux-data-type) (generic function)
aux-data-type (generic function)
lisp.lisp (file)
The path or filename for this module.
E.g, the name of a dynamically loaded library or of the main
executable.
lisp.lisp (file)
List of gtirb-byte-block objects in this object. Primitive accessor for byte-interval.
lisp.lisp (file)
(setf blocks) (generic function)
Blocks in this byte-interval.
This list could include ‘code-block’ or ‘data-block’ elements (which
both subclass the ‘gtirb-byte-block’ class) but not ‘proxy-block’
elements as proxy blocks do not hold bytes.
blocks (generic function)
Blocks in this byte-interval.
This list could include ‘code-block’ or ‘data-block’ elements (which
both subclass the ‘gtirb-byte-block’ class) but not ‘proxy-block’
elements as proxy blocks do not hold bytes.
lisp.lisp (file)
Access the BYTE-INTERVAL of this DATA-BLOCK.
lisp.lisp (file)
Access the BYTE-INTERVAL of this CODE-BLOCK.
lisp.lisp (file)
Byte-intervals holding all of the section’s bytes.
lisp.lisp (file)
Return the bytes held by OBJECT.
lisp.lisp (file)
(setf bytes) (setf expander)
Control flow graph (CFG) represented as a ‘graph:digraph’.
Nodes in the graph hold the UUIDs of code blocks which may be looked
up using ‘get-uuid’. Edges on the graph are labeled with ‘edge-label’
objects which provide information on the nature of the control flow of
the graph.
lisp.lisp (file)
This is true if this edge is due to a conditional instruction.
lisp.lisp (file)
A vector holding the actual bytes of this byte interval.
lisp.lisp (file)
Only present on architecture with multiple decode-modes.
lisp.lisp (file)
Is this a direct (as opposed to indirect) control flow edge.
lisp.lisp (file)
The type of an edge indicates the nature of the
control flow along it. E.g., "branch," "call," "fallthrough,"
and "return" are examples.
lisp.lisp (file)
The code-block which is the entry point of MODULE.
lisp.lisp (file)
(setf entry-point) (generic function)
entry-point (generic function)
lisp.lisp (file)
The binary file format of the original file this module represents.
lisp.lisp (file)
Flags holding common properties of this section.
These flags only hold those section properties which are relatively
universal including read, write, execute permissions, whether the
section is loaded into memory at run-time or not, whether the section
is zero initialized, and whether the section is thread-local.
lisp.lisp (file)
Get the referent of UUID in OBJECT.
lisp.lisp (file)
(setf get-uuid) (generic function)
Register REFERENT behind UUID in OBJECT.
lisp.lisp (file)
get-uuid (generic function)
Access the GTIRB of this MODULE.
lisp.lisp (file)
Access the top-level IR of this AUX-DATA.
lisp.lisp (file)
Access the top-level IR of this PROXY-BLOCK.
lisp.lisp (file)
Access the top-level IR of this DATA-BLOCK.
lisp.lisp (file)
Access the top-level IR of this CODE-BLOCK.
lisp.lisp (file)
Access the top-level IR of this SYM-ADDR-ADDR.
lisp.lisp (file)
Access the top-level IR of this SYM-ADDR-CONST.
lisp.lisp (file)
Access the top-level IR of this SYM-STACK-CONST.
lisp.lisp (file)
Access the top-level IR of this BYTE-INTERVAL.
lisp.lisp (file)
Access the top-level IR of this SECTION.
lisp.lisp (file)
Access the top-level IR of this SYMBOL.
lisp.lisp (file)
Access the top-level IR of this EDGE-LABEL.
lisp.lisp (file)
Access the top-level IR of this MODULE.
lisp.lisp (file)
lisp.lisp (file)
Access the top-level IR of this GTIRB.
lisp.lisp (file)
The instruction set architecture (ISA) of the code in this module.
lisp.lisp (file)
Access the MODULE of this PROXY-BLOCK.
lisp.lisp (file)
Access the MODULE of this SECTION.
lisp.lisp (file)
Access the MODULE of this SYMBOL.
lisp.lisp (file)
List of the modules on a top-level GTIRB IR instance.
lisp.lisp (file)
Name of this section.
lisp.lisp (file)
lisp.lisp (file)
An optional human-readable name for this module.
lisp.lisp (file)
Offset into this block’s bytes in the block’s byte-interval.
lisp.lisp (file)
Offset into this block’s bytes in the block’s byte-interval.
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Find all objects in OBJECT between START-ADDRESS and END-ADDRESS.
lisp.lisp (file)
Provide access to the referent or value of SYMBOL.
lisp.lisp (file)
(setf payload) (generic function)
Some systems specify a preferred address in memory.
On those systems this field may be used to capture this address.
lisp.lisp (file)
Hash-table of proxy-blocks keyed by UUID.
Proxy-blocks in GTIRB are used to represent cross-module linkages.
For example when code in a module calls to a function defined in an
external library, the CFG for that IR instance may represent this call
with a call edge to a proxy block representing the external called
function.
lisp.lisp (file)
Read a protobuf serialized GTIRB instance from SOURCE.
lisp.lisp (file)
Check the protobuf version.
Read protobuf object of class CLASS from SOURCE.
lisp.lisp (file)
The difference between this module’s and
‘preferred-addr’ and the address at which it was actually loaded.
lisp.lisp (file)
Remove the entry for UUID from OBJECT.
lisp.lisp (file)
lisp.lisp (file)
Access the SECTION of this BYTE-INTERVAL.
lisp.lisp (file)
List of the sections comprising this module.
lisp.lisp (file)
The length of the bytes held by this data block.
lisp.lisp (file)
The length of the bytes held by this code block.
lisp.lisp (file)
The size of this byte-interval.
It is possible for the size of a byte-interval to be larger than the
number of bytes in the byte interval’s ‘contents’ if portions of the
byte-interval are not represented statically but are zero-initialized
at runtime.
lisp.lisp (file)
lisp.lisp (file)
The length of the bytes held by this data block.
lisp.lisp (file)
The length of the bytes held by this code block.
lisp.lisp (file)
lisp.lisp (file)
The size of this byte-interval.
It is possible for the size of a byte-interval to be larger than the
number of bytes in the byte interval’s ‘contents’ if portions of the
byte-interval are not represented statically but are zero-initialized
at runtime.
lisp.lisp (file)
Symbol(s) appearing in this symbolic expression.
lisp.lisp (file)
Hash-table of symbols keyed by UUID.
lisp.lisp (file)
Update and return the ‘proto’ field of PROTO-BACKED-OBJECT.
This will ensure that any changes made to PROTO-BACKED-OBJECT outside
of its protocol buffer, e.g. any slots initialized using the
:from-proto option to ‘define-proto-backed-class’, are synchronized
against the object’s protocol buffer.
lisp.lisp (file)
Return the UUID for OBJECT as an integer.
lisp.lisp (file)
lisp.lisp (file)
Protobuf version.
lisp.lisp (file)
Next: Exported classes, Previous: Exported generic functions, Up: Exported definitions [Contents][Index]
Condition raised on GTIRB data structure violations.
Previous: Exported conditions, Up: Exported definitions [Contents][Index]
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:aux-data
:proto
(make-instance (quote gtirb.proto:aux-data))
proto (generic function)
(setf proto) (generic function)
Byte-interval in a GTIRB instance.
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:byte-interval
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:byte-interval)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this BYTE-INTERVAL.
Access the SECTION of this BYTE-INTERVAL.
(or null gtirb/gtirb:section)
:section
section (generic function)
(setf section) (generic function)
Blocks in this byte-interval.
This list could include ‘code-block’ or ‘data-block’ elements (which
both subclass the ‘gtirb-byte-block’ class) but not ‘proxy-block’
elements as proxy blocks do not hold bytes.
list
:blocks
blocks (generic function)
(setf blocks) (generic function)
Hash of symbolic-expressions keyed by offset.
hash-table
:symbolic-expressions
symbolic-expressions (generic function)
(setf symbolic-expressions) (generic function)
Code-block in a GTIRB IR instance.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:code-block
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:code-block)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this CODE-BLOCK.
Access the BYTE-INTERVAL of this CODE-BLOCK.
(or null gtirb/gtirb:byte-interval)
:byte-interval
byte-interval (generic function)
(setf byte-interval) (generic function)
Offset into this block’s bytes in the block’s byte-interval.
number
:offset
offset (generic function)
(setf offset) (generic function)
Data-block in a GTIRB IR instance.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:data-block
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:data-block)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this DATA-BLOCK.
Access the BYTE-INTERVAL of this DATA-BLOCK.
(or null gtirb/gtirb:byte-interval)
:byte-interval
byte-interval (generic function)
(setf byte-interval) (generic function)
Offset into this block’s bytes in the block’s byte-interval.
number
:offset
offset (generic function)
(setf offset) (generic function)
Label on a CFG edge.
This indicates the type of control flow along this edge.
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:edge-label
:proto
(make-instance (quote gtirb.proto:edge-label))
proto (generic function)
(setf proto) (generic function)
Base class of an instance of GTIRB IR.
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:ir
:proto
(make-instance (quote gtirb.proto:ir))
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this GTIRB.
List of the modules on a top-level GTIRB IR instance.
list
gtirb/gtirb:modules
modules (generic function)
(setf modules) (generic function)
Control flow graph (CFG) represented as a ‘graph:digraph’.
Nodes in the graph hold the UUIDs of code blocks which may be looked
up using ‘get-uuid’. Edges on the graph are labeled with ‘edge-label’
objects which provide information on the nature of the control flow of
the graph.
graph/graph:digraph
cfg (generic function)
(setf cfg) (generic function)
A-list of auxiliary data objects keyed by string name.
Aux-Data tables may hold structured or unstructured data. This data
may refer to elements of the GTIRB IR through uuids. Information
relevant to a particular module will be stored in Aux-Data tables
accessible from the specific module. Aux-Data tables only exist on
modules and on GTIRB IR instances.
list
aux-data (generic function)
(setf aux-data) (generic function)
Internal cache for UUID-based lookup.
hash-table
(make-hash-table)
by-uuid (generic function)
(setf by-uuid) (generic function)
Internal cache for Address-based lookup.
(gtirb/ranged:make-ranged)
by-address (generic function)
(setf by-address) (generic function)
lisp.lisp (file)
standard-object (class)
Super-class of the ‘code-block’ and ‘data-block’ classes.
This class abstracts over all GTIRB blocks which are able to hold bytes.
lisp.lisp (file)
gtirb-block (class)
Objects with a UUID contained in a GTIRB instance.
lisp.lisp (file)
standard-object (class)
proto-backed (class)
Module of a GTIRB IR instance.
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:module
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:module)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this MODULE.
Access the GTIRB of this MODULE.
(or null gtirb/gtirb:gtirb)
:gtirb
gtirb (generic function)
(setf gtirb) (generic function)
Hash-table of proxy-blocks keyed by UUID.
Proxy-blocks in GTIRB are used to represent cross-module linkages.
For example when code in a module calls to a function defined in an
external library, the CFG for that IR instance may represent this call
with a call edge to a proxy block representing the external called
function.
hash-table
(make-hash-table)
proxies (generic function)
(setf proxies) (generic function)
Hash-table of symbols keyed by UUID.
list
symbols (generic function)
(setf symbols) (generic function)
List of the sections comprising this module.
list
sections (generic function)
(setf sections) (generic function)
A-list of auxiliary data objects keyed by string name.
Aux-Data tables may hold structured or unstructured data. This data
may refer to elements of the GTIRB IR through uuids. Information
relevant to a particular module will be stored in Aux-Data tables
accessible from the specific module. Aux-Data tables only exist on
modules and on GTIRB IR instances.
list
aux-data (generic function)
(setf aux-data) (generic function)
Section in a GTIRB IR instance.
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:section
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:section)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this SECTION.
Access the MODULE of this SECTION.
(or null gtirb/gtirb:module)
:module
module (generic function)
(setf module) (generic function)
Byte-intervals holding all of the section’s bytes.
list
byte-intervals (generic function)
(setf byte-intervals) (generic function)
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:sym-addr-addr
:proto
(make-instance (quote gtirb.proto:sym-addr-addr))
proto (generic function)
(setf proto) (generic function)
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:sym-addr-const
:proto
(make-instance (quote gtirb.proto:sym-addr-const))
proto (generic function)
(setf proto) (generic function)
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:sym-stack-const
:proto
(make-instance (quote gtirb.proto:sym-stack-const))
proto (generic function)
(setf proto) (generic function)
Symbol with it’s NAME and an optional VALUE or REFERENT.
lisp.lisp (file)
proto-backed (class)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:symbol
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:symbol)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this SYMBOL.
Access the MODULE of this SYMBOL.
(or null gtirb/gtirb:module)
:module
module (generic function)
(setf module) (generic function)
Previous: Exported definitions, Up: Definitions [Contents][Index]
• Internal constants | ||
• Internal special variables | ||
• Internal macros | ||
• Internal functions | ||
• Internal generic functions | ||
• Internal structures | ||
• Internal classes |
Next: Internal special variables, Previous: Internal definitions, Up: Internal definitions [Contents][Index]
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Next: Internal macros, Previous: Internal constants, Up: Internal definitions [Contents][Index]
Buffer to hold output of is-equal-p verbose failure messages.
lisp.lisp (file)
Maximum length of output to show of ‘*is-equal-p-verbose-output-buffer*’.
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Next: Internal functions, Previous: Internal special variables, Up: Internal definitions [Contents][Index]
lisp.lisp (file)
Define a Common Lisp class backed by a protobuf class. SLOT-SPECIFIERS is as in ‘defclass’ with the addition of optional :to-proto and :from-proto fields, which may take protobuf serialization functions, and :skip-equal-p field which causes ‘is-equal-p’ to skip that field. PROTO-FIELDS may hold a list of fields which pass through directly to the backing protobuf class. The :parent option names the field holding the containing protobuf element. The :address-range option holds the logic to calculate an address range for instances of the object.
lisp.lisp (file)
lisp.lisp (file)
Next: Internal generic functions, Previous: Internal macros, Up: Internal definitions [Contents][Index]
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Return a copy of SEQUENCE bounded by START and END.
lisp.lisp (file)
(setf shift-subseq) (setf expander)
Update the subseq of SEQUENCE bounded by START and END.
lisp.lisp (file)
shift-subseq (function)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Next: Internal structures, Previous: Internal functions, Up: Internal definitions [Contents][Index]
Internal cache for Address-based lookup.
lisp.lisp (file)
Internal cache for UUID-based lookup.
lisp.lisp (file)
Delete ITEM from OBJECT between START-ADDRESS and END-ADDRESS.
lisp.lisp (file)
Insert ITEM into OBJECT between START-ADDRESS and END-ADDRESS.
lisp.lisp (file)
Internal function called by ‘is-equal-p’.
lisp.lisp (file)
lisp.lisp (file)
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
lisp.lisp (file)
lisp.lisp (file)
Set UUID to NEW in OBJECT’s parent.
lisp.lisp (file)
Update the offsets into BYTE-INTERVAL due to saving NEW into START END.
lisp.lisp (file)
Next: Internal classes, Previous: Internal generic functions, Up: Internal definitions [Contents][Index]
lisp.lisp (file)
interval (structure)
integer
0
uuid-interval-uuid (function)
(setf uuid-interval-uuid) (function)
Previous: Internal structures, Up: Internal definitions [Contents][Index]
Objects which may be serialized to/from protobuf.
lisp.lisp (file)
gtirb-node (class)
Proxy-block in a GTIRB IR instance.
lisp.lisp (file)
Backing protobuf object.
Should not need to be manipulated by client code.
gtirb.proto:proxy-block
:proto
(let ((gtirb/gtirb::it (make-instance (quote gtirb.proto:proxy-block)))) (setf (gtirb.proto:uuid gtirb/gtirb::it) (gtirb/utility:new-uuid)) gtirb/gtirb::it)
proto (generic function)
(setf proto) (generic function)
Access the top-level IR of this PROXY-BLOCK.
Access the MODULE of this PROXY-BLOCK.
(or null gtirb/gtirb:module)
:module
module (generic function)
(setf module) (generic function)
lisp.lisp (file)
standard-object (class)
Symbol(s) appearing in this symbolic expression.
list
:symbols
symbols (generic function)
(setf symbols) (generic function)
Previous: Definitions, Up: Top [Contents][Index]
• Concept index | ||
• Function index | ||
• Variable index | ||
• Data type index |
Next: Function index, Previous: Indexes, Up: Indexes [Contents][Index]
Jump to: | F G L M P S |
---|
Jump to: | F G L M P S |
---|
Next: Variable index, Previous: Concept index, Up: Indexes [Contents][Index]
Jump to: | (
A B C D E F G I M N O P R S U V W |
---|
Jump to: | (
A B C D E F G I M N O P R S U V W |
---|
Next: Data type index, Previous: Function index, Up: Indexes [Contents][Index]
Jump to: | *
+
A B C G I M O P S U V |
---|
Jump to: | *
+
A B C G I M O P S U V |
---|
Previous: Variable index, Up: Indexes [Contents][Index]
Jump to: | A B C D E G I M P S U |
---|
Jump to: | A B C D E G I M P S U |
---|