|
decompiler 1.0.0
|
Classes to collect, analyze, and match expressions within p-code data-flow. More...
#include "op.hh"Classes | |
| struct | ghidra::PcodeOpNode |
| An edge in a data-flow path or graph. More... | |
| struct | ghidra::TraverseNode |
| Node for a forward traversal of a Varnode expression. More... | |
| class | ghidra::BooleanMatch |
| Static methods for determining if two boolean expressions are the same or complementary. More... | |
| class | ghidra::BooleanExpressionMatch |
| A helper class for describing the similarity of the boolean condition between 2 CBRANCH operations. More... | |
| class | ghidra::AdditiveEdge |
| Class representing a term in an additive expression. More... | |
| class | ghidra::TermOrder |
| A class for ordering Varnode terms in an additive expression. More... | |
| class | ghidra::AddExpression |
| Class for lightweight matching of two additive expressions. More... | |
| class | ghidra::AddExpression::Term |
| A term in the expression. More... | |
| class | ghidra::BitFieldExpression |
| A container for an expression manipulating a bitfield. More... | |
| class | ghidra::InsertExpression |
| A write to a bitfield stored in an explicit Varnode. More... | |
| class | ghidra::InsertStoreExpression |
| A write to a bitfield through a STORE op. More... | |
| class | ghidra::PullExpression |
| A read of a bitfield via a ZPULL or SPULL operator. More... | |
Functions | |
| int4 | ghidra::functionalEqualityLevel (Varnode *vn1, Varnode *vn2, Varnode **res1, Varnode **res2) |
| Try to determine if vn1 and vn2 contain the same value. | |
| bool | ghidra::functionalEquality (Varnode *vn1, Varnode *vn2) |
| Determine if two Varnodes hold the same value. | |
| bool | ghidra::functionalDifference (Varnode *vn1, Varnode *vn2, int4 depth) |
| Return true if vn1 and vn2 are verifiably different values. | |
| Varnode * | ghidra::rootPointer (Varnode *vn, uintb &offset) |
| Back-track as far as possible from a pointer Varnode thru PTRSUB, INT_ADD, and COPY collecting offsets. | |
| bool | ghidra::pointerEquality (Varnode *vn1, Varnode *vn2) |
| Determine if two pointer Varnodes always hold the same value. | |
Classes to collect, analyze, and match expressions within p-code data-flow.
Return true if vn1 and vn2 are verifiably different values.
This is actually a rather speculative test
| vn1 | is the first Varnode to compare |
| vn2 | is the second Varnode |
| depth | is the maximum level to recurse while testing |
Determine if two Varnodes hold the same value.
Only return true if it can be immediately determined they are equivalent
| vn1 | is the first Varnode |
| vn2 | is the second Varnode |
| int4 ghidra::functionalEqualityLevel | ( | Varnode * | vn1, |
| Varnode * | vn2, | ||
| Varnode ** | res1, | ||
| Varnode ** | res2 | ||
| ) |
Try to determine if vn1 and vn2 contain the same value.
Return:
| vn1 | is the first Varnode to compare |
| vn2 | is the second Varnode |
| res1 | is a reference to the first returned Varnode |
| res2 | is a reference to the second returned Varnode |
Determine if two pointer Varnodes always hold the same value.
| vn1 | is the first pointer to compare |
| vn2 | is the second pointer to compare |
| Varnode * ghidra::rootPointer | ( | Varnode * | vn, |
| uintb & | offset | ||
| ) |
Back-track as far as possible from a pointer Varnode thru PTRSUB, INT_ADD, and COPY collecting offsets.
The pointer that is reached by back-tracking is returned, and any accumulated offset is passed back.
| vn | is the pointer Varnode |
| offset | passes back the accumulated offset |