decompiler 1.0.0
Classes | Functions
expression.hh File Reference

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.
 
Varnodeghidra::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.
 

Detailed Description

Classes to collect, analyze, and match expressions within p-code data-flow.

Function Documentation

◆ functionalDifference()

bool ghidra::functionalDifference ( Varnode vn1,
Varnode vn2,
int4  depth 
)

Return true if vn1 and vn2 are verifiably different values.

This is actually a rather speculative test

Parameters
vn1is the first Varnode to compare
vn2is the second Varnode
depthis the maximum level to recurse while testing
Returns
true if they are different

◆ functionalEquality()

bool ghidra::functionalEquality ( Varnode vn1,
Varnode vn2 
)

Determine if two Varnodes hold the same value.

Only return true if it can be immediately determined they are equivalent

Parameters
vn1is the first Varnode
vn2is the second Varnode
Returns
true if they are provably equal

◆ functionalEqualityLevel()

int4 ghidra::functionalEqualityLevel ( Varnode vn1,
Varnode vn2,
Varnode **  res1,
Varnode **  res2 
)

Try to determine if vn1 and vn2 contain the same value.

Return:

  • -1, if they do not, or if it can't be immediately verified
  • 0, if they do hold the same value
  • >0, if the result is contingent on additional varnode pairs having the same value In the last case, the varnode pairs are returned as (res1[i],res2[i]), where the return value is the number of pairs.
    Parameters
    vn1is the first Varnode to compare
    vn2is the second Varnode
    res1is a reference to the first returned Varnode
    res2is a reference to the second returned Varnode
    Returns
    the result of the comparison

◆ pointerEquality()

bool ghidra::pointerEquality ( Varnode vn1,
Varnode vn2 
)

Determine if two pointer Varnodes always hold the same value.

Parameters
vn1is the first pointer to compare
vn2is the second pointer to compare

◆ rootPointer()

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.

Parameters
vnis the pointer Varnode
offsetpasses back the accumulated offset
Returns
the reached Varnode pointer