decompiler
1.0.0
|
A standard model for passing back return values from a function. More...
#include <fspec.hh>
Public Member Functions | |
ParamListStandardOut (void) | |
Constructor. | |
ParamListStandardOut (const ParamListStandardOut &op2) | |
Copy constructor. | |
virtual uint4 | getType (void) const |
Get the type of parameter list. | |
virtual void | assignMap (const vector< Datatype * > &proto, bool isinput, TypeFactory &typefactory, vector< ParameterPieces > &res) const |
Given list of data-types, map the list positions to storage locations. More... | |
virtual void | fillinMap (ParamActive *active) const |
Given an unordered list of storage locations, calculate a function prototype. More... | |
virtual bool | possibleParam (const Address &loc, int4 size) const |
Does the given storage location make sense as a parameter. More... | |
virtual void | restoreXml (const Element *el, const AddrSpaceManager *manage, vector< EffectRecord > &effectlist, bool normalstack) |
Restore the model from an XML stream. More... | |
virtual ParamList * | clone (void) const |
Clone this parameter list model. | |
Public Member Functions inherited from ParamListStandard | |
ParamListStandard (void) | |
Construct for use with restoreXml() | |
ParamListStandard (const ParamListStandard &op2) | |
Copy constructor. | |
const vector< ParamEntry > & | getEntry (void) const |
Get the list of parameter entries. | |
virtual bool | checkJoin (const Address &hiaddr, int4 hisize, const Address &loaddr, int4 losize) const |
Check if the given two storage locations can represent a single logical parameter. More... | |
virtual bool | checkSplit (const Address &loc, int4 size, int4 splitpoint) const |
Check if it makes sense to split a single storage location into two parameters. More... | |
virtual bool | possibleParamWithSlot (const Address &loc, int4 size, int4 &slot, int4 &slotsize) const |
Pass-back the slot and slot size for the given storage location as a parameter. More... | |
virtual bool | unjustifiedContainer (const Address &loc, int4 size, VarnodeData &res) const |
Check if the given storage location looks like an unjustified parameter. More... | |
virtual OpCode | assumedExtension (const Address &addr, int4 size, VarnodeData &res) const |
Get the type of extension and containing parameter for the given storage. More... | |
virtual AddrSpace * | getSpacebase (void) const |
Get the address space associated with any stack based parameters in this list. More... | |
virtual void | getRangeList (AddrSpace *spc, RangeList &res) const |
For a given address space, collect all the parameter locations within that space. More... | |
virtual int4 | getMaxDelay (void) const |
Return the maximum heritage delay across all possible parameters. More... | |
Public Member Functions inherited from ParamList | |
virtual | ~ParamList (void) |
Destructor. | |
Additional Inherited Members | |
Public Types inherited from ParamList | |
enum | { p_standard, p_standard_out, p_register, p_merged } |
Protected Member Functions inherited from ParamListStandard | |
int4 | findEntry (const Address &loc, int4 size) const |
Given storage location find matching ParamEntry. More... | |
Address | assignAddress (const Datatype *tp, vector< int4 > &status) const |
Assign storage for given parameter data-type. More... | |
void | buildTrialMap (ParamActive *active) const |
Build map from parameter trials to model ParamEntrys. More... | |
void | separateFloat (ParamActive *active, int4 &floatstart, int4 &floatstop, int4 &start, int4 &stop) const |
Calculate the range of floating-point entries within a given set of parameter trials. More... | |
void | forceExclusionGroup (ParamActive *active) const |
Enforce exclusion rules for the given set of parameter trials. More... | |
void | forceNoUse (ParamActive *active, int4 start, int4 stop) const |
Mark every trial above the first "definitely not used" as inactive. More... | |
void | forceInactiveChain (ParamActive *active, int4 maxchain, int4 start, int4 stop) const |
Enforce rules about chains of inactive slots. More... | |
void | calcDelay (void) |
Calculate the maximum heritage delay for any potential parameter in this list. | |
Protected Attributes inherited from ParamListStandard | |
int4 | numgroup |
Number of groups in this parameter convention. | |
int4 | maxdelay |
Maximum heritage delay across all parameters. | |
int4 | pointermax |
If non-zero, maximum size of a data-type before converting to a pointer. | |
bool | thisbeforeret |
Does a this parameter come before a hidden return parameter. | |
int4 | nonfloatgroup |
Group of first entry which is not marked float. | |
vector< ParamEntry > | entry |
The ordered list of parameter entries. | |
AddrSpace * | spacebase |
Address space containing relative offset parameters. | |
A standard model for passing back return values from a function.
This models a resource list of potential storage locations for a return value, at most 1 of which will be chosen for a given function. Order only matters in that the first ParamEntry that fits is used. If no entry fits, the return value is converted to a pointer data-type, storage allocation is attempted again, and the return value is marked as a hidden return parameter to inform the input model.
|
virtual |
Given list of data-types, map the list positions to storage locations.
If we know the function prototype, recover how parameters are actually stored using the model.
proto | is the ordered list of data-types |
isinput | is true for the input prototype, false for output prototype |
typefactory | is the TypeFactory (for constructing pointers) |
res | will contain the storage locations corresponding to the datatypes |
Reimplemented from ParamListStandard.
References ParamListStandard::assignAddress(), AddrSpace::getAddrSize(), TypeFactory::getArch(), AddrSpaceManager::getDefaultSpace(), TypeFactory::getTypePointerAbsolute(), AddrSpace::getWordSize(), Varnode::hiddenretparm, Varnode::indirectstorage, ParamListStandard::numgroup, ParamListStandard::spacebase, and TYPE_VOID.
|
virtual |
Given an unordered list of storage locations, calculate a function prototype.
A list of input (or output) trials is given, which may have holes, invalid inputs etc. Decide on the formal ordered parameter list. Trials within the ParamActive are added, removed, or reordered as needed.
active | is the given list of trials |
Reimplemented from ParamListStandard.
References ParamListStandard::entry, ParamActive::getNumTrials(), ParamTrial::getSize(), ParamActive::getTrial(), ParamEntry::getType(), ParamEntry::isParamCheckHigh(), ParamEntry::isParamCheckLow(), ParamEntry::justifiedContain(), ParamTrial::markNoUse(), ParamActive::sortTrials(), and TYPE_PTR.
|
virtual |
Does the given storage location make sense as a parameter.
Within this model, decide if the storage location can be considered a parameter.
loc | is the starting address of the storage location |
size | is the number of bytes in the storage location |
Reimplemented from ParamListStandard.
References ParamListStandard::entry.
|
virtual |
Restore the model from an XML stream.
el | is the root <input> or <output> element |
manage | is used to resolve references to address spaces |
effectlist | is a container collecting EffectRecords across all parameters |
normalstack | is true if parameters are pushed on the stack in the normal order |
Reimplemented from ParamListStandard.
References ParamListStandard::entry, and ParamListStandard::restoreXml().