|
decompiler
1.0.0
|
Pull SUBPIECE back through MULTIEQUAL. More...
Public Member Functions | |
| virtual Rule * | clone (const ActionGroupList &grouplist) const |
| Clone the Rule. More... | |
| virtual void | getOpList (vector< uint4 > &oplist) const |
| List of op codes this rule operates on. More... | |
| virtual int4 | applyOp (PcodeOp *op, Funcdata &data) |
| Attempt to apply this Rule. More... | |
Public Member Functions inherited from Rule | |
| Rule (const string &g, uint4 fl, const string &nm) | |
| Construct given group, properties name. More... | |
| bool | checkActionBreak (void) |
| Check if an action breakpoint is turned on. More... | |
| virtual void | reset (Funcdata &data) |
| Reset this Rule. More... | |
| virtual void | resetStats (void) |
| Reset Rule statistics. More... | |
| virtual void | printStatistics (ostream &s) const |
| Print statistics for this Rule. More... | |
Static Public Member Functions | |
| static void | minMaxUse (Varnode *vn, int4 &maxByte, int4 &minByte) |
| Compute minimum and maximum bytes being used. More... | |
| static void | replaceDescendants (Varnode *origVn, Varnode *newVn, int4 maxByte, int4 minByte, Funcdata &data) |
| static bool | acceptableSize (int4 size) |
| Return true if given size is a suitable truncated size. More... | |
| static Varnode * | buildSubpiece (Varnode *basevn, uint4 outsize, uint4 shift, Funcdata &data) |
| Build a SUBPIECE of given base Varnode. More... | |
| static Varnode * | findSubpiece (Varnode *basevn, uint4 outsize, uint4 shift) |
| Find a predefined SUBPIECE of a base Varnode. More... | |
Additional Inherited Members | |
Public Types inherited from Rule | |
| enum | typeflags { type_disable = 1, rule_debug = 2, warnings_on = 4, warnings_given = 8 } |
| Properties associated with a Rule. More... | |
Pull SUBPIECE back through MULTIEQUAL.
|
static |
Return true if given size is a suitable truncated size.
| size | is the given size |
Referenced by applyOp(), and RulePullsubIndirect::applyOp().
Attempt to apply this Rule.
This method contains the main logic for applying the Rule. It must use a given PcodeOp as the point at which the Rule applies. If it does apply, changes are made directly to the function and 1 (non-zero) is returned, otherwise 0 is returned.
Reimplemented from Rule.
References acceptableSize(), buildSubpiece(), calc_mask(), CPUI_INT_SEXT, CPUI_INT_ZEXT, CPUI_MULTIEQUAL, findSubpiece(), minMaxUse(), Funcdata::newOp(), Funcdata::newVarnodeOut(), Funcdata::opInsertBegin(), Funcdata::opSetAllInput(), Funcdata::opSetOpcode(), Address::renormalize(), and replaceDescendants().
|
static |
Build a SUBPIECE of given base Varnode.
The PcodeOp is constructed and inserted near the definition of the base Varnode.
| basevn | is the given base Varnode |
| outsize | is the required truncated size in bytes |
| shift | is the number of least significant bytes to truncate |
| data | is the function being analyzed |
References CPUI_SUBPIECE, VarnodeData::getAddr(), AddrSpace::isBigEndian(), Funcdata::newConstant(), Funcdata::newOp(), Funcdata::newUniqueOut(), Funcdata::newVarnodeOut(), Funcdata::opInsertAfter(), Funcdata::opInsertBegin(), Funcdata::opSetInput(), Funcdata::opSetOpcode(), Address::renormalize(), VarnodeData::size, and VarnodeData::space.
Referenced by applyOp(), and RulePullsubIndirect::applyOp().
|
inlinevirtual |
Find a predefined SUBPIECE of a base Varnode.
Given a Varnode and desired dimensions (size and shift), search for a preexisting truncation defined in the same block as the original Varnode or return NULL
| basevn | is the base Varnode |
| outsize | is the desired truncation size |
| shift | if the desired truncation shift |
References CPUI_SUBPIECE.
Referenced by applyOp(), and RulePullsubIndirect::applyOp().
|
virtual |
List of op codes this rule operates on.
Populate the given array with all possible OpCodes this Rule might apply to. By default, this method returns all possible OpCodes
| oplist | is the array to populate |
Reimplemented from Rule.
References CPUI_SUBPIECE.
|
static |
Compute minimum and maximum bytes being used.
For bytes in given Varnode pass back the largest and smallest index (lsb=0) consumed by an immediate descendant.
| vn | is the given Varnode |
| maxByte | will hold the index of the maximum byte |
| minByte | will hold the index of the minimum byte |
References CPUI_SUBPIECE.
Referenced by applyOp(), and RulePullsubIndirect::applyOp().
|
static |
Replace given Varnode with (smaller) newVn in all descendants
If minMaxUse() indicates not all bytes are used, this should always succeed
| origVn | is the given Varnode |
| newVn | is the new Varnode to replace with |
| maxByte | is the maximum byte immediately used in origVn |
| minByte | is the minimum byte immediately used in origVn |
| data | is the function being analyzed |
References CPUI_COPY, CPUI_SUBPIECE, Funcdata::newConstant(), Funcdata::opRemoveInput(), Funcdata::opSetInput(), and Funcdata::opSetOpcode().
Referenced by applyOp(), and RulePullsubIndirect::applyOp().
1.8.17