decompiler
1.0.0
|
Common data shared by decompiler commands. More...
#include <ifacedecomp.hh>
Public Member Functions | |
IfaceDecompData (void) | |
Constructor. | |
void | allocateCallGraph (void) |
Allocate the call-graph object. | |
void | abortFunction (ostream &s) |
Clear references to current function. More... | |
void | clearArchitecture (void) |
Free all resources for the current architecture/program. | |
void | followFlow (ostream &s, int4 size) |
Generate raw p-code for the current function. More... | |
Varnode * | readVarnode (istream &s) |
Read a varnode from the given stream. More... | |
void | readSymbol (const string &name, vector< Symbol *> &res) |
Find a symbol by name. More... | |
Public Member Functions inherited from ghidra::IfaceData | |
virtual | ~IfaceData (void) |
Destructor. | |
Public Attributes | |
Funcdata * | fd |
Current function active in the console. | |
Architecture * | conf |
Current architecture/program active in the console. | |
CallGraph * | cgraph |
Call-graph information for the program. | |
FunctionTestCollection * | testCollection |
Executable environment from a datatest. | |
Common data shared by decompiler commands.
void ghidra::IfaceDecompData::abortFunction | ( | ostream & | s | ) |
Clear references to current function.
This is called if a command throws a low-level error. It clears any analysis on the function, sets the current function to null, and issues a warning.
s | is the stream to write the warning to |
Referenced by ghidra::IfcExecuteTestCommand::execute().
void ghidra::IfaceDecompData::followFlow | ( | ostream & | s, |
int4 | size | ||
) |
Generate raw p-code for the current function.
Follow flow from the entry point of the function and generate the raw p-code ops for all instructions, up to return instructions. If a size in bytes is provided, it bounds the memory region where flow can be followed. Otherwise, a zero size allows unbounded flow tracing.
s | is a output stream for reporting function details or errors |
size | (if non-zero) is the maximum number of bytes to disassemble |
References ghidra::LowlevelError::explain, ghidra::Funcdata::followFlow(), ghidra::Funcdata::getAddress(), ghidra::AddrSpace::getHighest(), ghidra::Funcdata::getName(), ghidra::Address::getSpace(), and ghidra::Address::printRaw().
void ghidra::IfaceDecompData::readSymbol | ( | const string & | name, |
vector< Symbol *> & | res | ||
) |
Find a symbol by name.
Find any symbols matching the given name in the current scope. Scope is either the current function scope if a function is active, otherwise the global scope.
name | is the given name, either absolute or partial |
res | will hold any matching symbols |
References ghidra::Funcdata::getScopeLocal(), and ghidra::Scope::queryByName().
Varnode * ghidra::IfaceDecompData::readVarnode | ( | istream & | s | ) |
Read a varnode from the given stream.
The Varnode is selected from the current function. It is specified as a storage location with info about its defining p-code in parantheses.
EAX(r0x10000:0x65)
ECX(i)
r0x10001000:4(:0x96)
u0x00001100:1(:0x102)
#0x1(0x10205:0x27)
The storage address space is given as the short-cut character followed by the address offset. For register spaces, the name of the register can be given instead of the offset. After the offset, a size can be specified with a ':' followed by the size in bytes. If size is not provided and there is no register name, a default word size is assigned based on the address space.
The defining p-code op is specified either as:
EAX(r0x10000:0x65)
EAX(:0x65)
orEAX(i)
For a constant Varnode, the storage offset is the actual value of the constant, and the p-code address and sequence number must both be present and specify the p-code op that reads the constant.
s | is the given input stream |
References ghidra::Funcdata::beginLoc(), ghidra::Funcdata::endLoc(), ghidra::Funcdata::findOp(), ghidra::Funcdata::findVarnodeInput(), ghidra::Funcdata::findVarnodeWritten(), ghidra::PcodeOp::getAddr(), ghidra::Varnode::getAddr(), ghidra::Varnode::getDef(), ghidra::PcodeOp::getIn(), ghidra::Address::getSpace(), ghidra::PcodeOp::getTime(), ghidra::AddrSpace::getType(), ghidra::IPTR_CONSTANT, ghidra::Varnode::isFree(), ghidra::Address::isInvalid(), ghidra::Varnode::isWritten(), and ghidra::PcodeOp::numInput().