Ghidra Decompiler Analysis Engine
Public Member Functions | List of all members
SegmentOp Class Reference

The segmented address operator. More...

#include <userop.hh>

Inheritance diagram for SegmentOp:
Inheritance graph
[legend]
Collaboration diagram for SegmentOp:
Collaboration graph
[legend]

Public Member Functions

 SegmentOp (Architecture *g, const string &nm, int4 ind)
 Constructor. More...
 
virtual int4 getNumVariableTerms (void) const
 Get the number of input Varnodes expected.
 
virtual bool unify (Funcdata &data, PcodeOp *op, vector< Varnode * > &bindlist) const
 Gather the formal input Varnode objects given the root PcodeOp. More...
 
virtual uintb execute (const vector< uintb > &input) const
 Compute the output value of this operation, given constant inputs. More...
 
virtual void restoreXml (const Element *el)
 Restore the detailed description from an XML stream. More...
 
- Public Member Functions inherited from UserPcodeOp
virtual string getOperatorName (const PcodeOp *op) const
 Get the symbol representing this operation in decompiled code. More...
 

Additional Inherited Members

- Protected Attributes inherited from UserPcodeOp
string name
 Low-level name of p-code operator.
 
int4 useropindex
 Index passed in the CALLOTHER op.
 
Architectureglb
 Architecture owning the user defined op.
 

Detailed Description

The segmented address operator.

This op is a placeholder for address mappings involving segments. The map goes between a high-level view of a pointer, consisting of multiple pieces, and a low-level view, where there is only a single absolute pointer. The mapping could be

The output of the operator is always a full low-level pointer. The operator takes two inputs:

High-level analysis can ignore the base/segment and any normalization on the near pointer. Emitted expressions involving this segment op prints only the near portion. Data-type information propagates only through this high-level side.

The decompiler looks for the term-tree defined in SegmentOp and replaces it with the SEGMENTOP operator in any p-code it analyzes. The core routine that looks for the term-tree is unify().

Constructor & Destructor Documentation

◆ SegmentOp()

SegmentOp::SegmentOp ( Architecture g,
const string &  nm,
int4  ind 
)

Constructor.

Parameters
gis the owning Architecture for this instance of the segment operation
nmis the low-level name of the segment operation
indis the constant id identifying the specific CALLOTHER variant

Member Function Documentation

◆ execute()

uintb SegmentOp::execute ( const vector< uintb > &  input) const
virtual

Compute the output value of this operation, given constant inputs.

Parameters
inputis the ordered list of constant inputs
Returns
the resulting value as a constant

Implements TermPatternOp.

◆ restoreXml()

void SegmentOp::restoreXml ( const Element el)
virtual

Restore the detailed description from an XML stream.

The details of how a user defined operation behaves can be dynamically configured from an XML tag.

Parameters
elis the root XML element describing the op

Implements UserPcodeOp.

◆ unify()

bool SegmentOp::unify ( Funcdata data,
PcodeOp op,
vector< Varnode * > &  bindlist 
) const
virtual

Gather the formal input Varnode objects given the root PcodeOp.

Parameters
datais the function being analyzed
opis the root operation
bindlistwill hold the ordered list of input Varnodes
Returns
true if the requisite inputs were found

Implements TermPatternOp.


The documentation for this class was generated from the following files: