Ghidra Decompiler Analysis Engine
|
A light-weight emulator to calculate switch targets from switch variables. More...
#include <jumptable.hh>
Public Member Functions | |
EmulateFunction (Funcdata *f) | |
Constructor. More... | |
virtual void | setExecuteAddress (const Address &addr) |
Set the address of the next instruction to emulate. | |
virtual uintb | getVarnodeValue (Varnode *vn) const |
Given a specific Varnode, retrieve the current value for it from the machine state. More... | |
virtual void | setVarnodeValue (Varnode *vn, uintb val) |
Given a specific Varnode, set the given value for it in the current machine state. More... | |
uintb | emulatePath (uintb val, const PathMeld &pathMeld, PcodeOp *startop, Varnode *startvn) |
Execute from a given starting point and value to the common end-point of the path set. More... | |
void | collectLoadPoints (vector< LoadTable > &res) const |
Recover any LOAD table descriptions. More... | |
Public Member Functions inherited from EmulatePcodeOp | |
EmulatePcodeOp (Architecture *g) | |
Constructor. More... | |
void | setCurrentOp (PcodeOp *op) |
Establish the current PcodeOp being emulated. More... | |
virtual Address | getExecuteAddress (void) const |
Get the address of the current instruction being executed. | |
Public Member Functions inherited from Emulate | |
void | setHalt (bool val) |
Set the halt state of the emulator. More... | |
bool | getHalt (void) const |
Get the halt state of the emulator. More... | |
void | executeCurrentOp (void) |
Do a single pcode op step. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from EmulatePcodeOp | |
virtual uintb | getLoadImageValue (AddrSpace *spc, uintb offset, int4 sz) const |
Pull a value from the load-image given a specific address. More... | |
virtual void | executeUnary (void) |
Execute a unary arithmetic/logical operation. | |
virtual void | executeBinary (void) |
Execute a binary arithmetic/logical operation. | |
virtual void | executeStore (void) |
Standard behavior for a p-code STORE. | |
virtual bool | executeCbranch (void) |
Check if the conditional of a CBRANCH is true. More... | |
virtual void | executeMultiequal (void) |
Standard behavior for a MULTIEQUAL (phi-node) | |
virtual void | executeIndirect (void) |
Standard behavior for an INDIRECT op. | |
virtual void | executeSegmentOp (void) |
Behavior for a SEGMENTOP. | |
virtual void | executeCpoolRef (void) |
Standard behavior for a CPOOLREF (constant pool reference) op. | |
virtual void | executeNew (void) |
Standard behavior for (low-level) NEW op. | |
Protected Attributes inherited from EmulatePcodeOp | |
Architecture * | glb |
The underlying Architecture for the program being emulated. | |
PcodeOp * | currentOp |
Current PcodeOp being executed. | |
PcodeOp * | lastOp |
Last PcodeOp that was executed. | |
Protected Attributes inherited from Emulate | |
bool | emu_halted |
Set to true if the emulator is halted. | |
OpBehavior * | currentBehave |
Behavior of the next op to execute. | |
A light-weight emulator to calculate switch targets from switch variables.
We assume we only have to store memory state for individual Varnodes and that dynamic LOADs are resolved from the LoadImage. BRANCH and CBRANCH emulation will fail, there can only be one execution path, although there can be multiple data-flow paths.
EmulateFunction::EmulateFunction | ( | Funcdata * | f | ) |
f | is the function to emulate within |
void EmulateFunction::collectLoadPoints | ( | vector< LoadTable > & | res | ) | const |
Recover any LOAD table descriptions.
Pass back any LOAD records collected during emulation. The individual records are sorted and collapsed into concise table descriptions.
res | will hold any resulting table descriptions |
uintb EmulateFunction::emulatePath | ( | uintb | val, |
const PathMeld & | pathMeld, | ||
PcodeOp * | startop, | ||
Varnode * | startvn | ||
) |
Execute from a given starting point and value to the common end-point of the path set.
Flow the given value through all paths in the path container to produce the single output value.
val | is the starting value |
pathMeld | is the set of paths to execute |
startop | is the starting PcodeOp within the path set |
startvn | is the Varnode holding the starting value |
|
virtual |
Given a specific Varnode, retrieve the current value for it from the machine state.
This is the placeholder internal operation for obtaining a Varnode value during emulation. The value is loaded using the Varnode as the address and storage size.
vn | is the specific Varnode |
Implements EmulatePcodeOp.
|
virtual |
Given a specific Varnode, set the given value for it in the current machine state.
This is the placeholder internal operation for setting a Varnode value during emulation. The value is stored using the Varnode as the address and storage size.
vn | is the specific Varnode |
val | is the constant value to store |
Implements EmulatePcodeOp.