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

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.
 

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