decompiler
1.0.0
|
Collect terms in a sum: V * c + V * d => V * (c + d)
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... | |
![]() | |
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 Private Member Functions | |
static Varnode * | getMultCoeff (Varnode *vn, uintb &coef) |
Get the multiplicative coefficient. More... | |
static int4 | doDistribute (Funcdata &data, PcodeOp *op) |
Distribute coefficient within one term. More... | |
Additional Inherited Members | |
![]() | |
enum | typeflags { type_disable = 1, rule_debug = 2, warnings_on = 4, warnings_given = 8 } |
Properties associated with a Rule. More... | |
Collect terms in a sum: V * c + V * d => V * (c + d)
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 calc_mask(), TermOrder::collect(), CPUI_INT_ADD, CPUI_INT_MULT, doDistribute(), getMultCoeff(), Funcdata::newConstant(), Funcdata::newOp(), Funcdata::newUniqueOut(), Funcdata::opInsertBefore(), Funcdata::opSetInput(), Funcdata::opSetOpcode(), and TermOrder::sortTerms().
|
inlinevirtual |
Distribute coefficient within one term.
If a term has a multiplicative coefficient, but the underlying term is still additive, in some situations we may need to distribute the coefficient before simplifying further. The given PcodeOp is a INT_MULT where the second input is a constant. We also know the first input is formed with INT_ADD. Distribute the coefficient to the INT_ADD inputs.
data | is the function being analyzed |
op | is the given PcodeOp |
References CPUI_INT_ADD, CPUI_INT_MULT, Funcdata::newConstant(), Funcdata::newOp(), Funcdata::newUniqueOut(), Funcdata::opInsertBefore(), Funcdata::opSetInput(), and Funcdata::opSetOpcode().
Referenced by applyOp().
Get the multiplicative coefficient.
Given a Varnode term in the expression, check if the last operation producing it is to multiply by a constant. If so pass back the constant coefficient and return the underlying Varnode. Otherwise pass back the constant 1, and return the original Varnode
vn | is the given Varnode |
coef | is the reference for passing back the coefficient |
References CPUI_INT_MULT.
Referenced by 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_INT_ADD.