java.lang.Object
com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.compiler.EExpressionMatcher

public class EExpressionMatcher extends Object
Match an IR expression against an IR template.
  • Field Details

    • verbose

      public static boolean verbose
  • Constructor Details

    • EExpressionMatcher

      public EExpressionMatcher(INode template, Map<Integer,Object> initmap)
      Create an IRE matcher.
      Parameters:
      template - the template to match an expression against
      initmap - an optional, initial match map
    • EExpressionMatcher

      public EExpressionMatcher(INode template)
      Create an IRE matcher.
      Parameters:
      template - the template to match an expression against
  • Method Details

    • setAllowDeepAssociativity

      public void setAllowDeepAssociativity(boolean allowDeepAssociativity)
      Use an operator's associativity to achieve better matching. For example, matching V0 * (#1 + $2) on r0 * ((r1 + 4) + r2) could match on:
       V0 = r0
       #1 = 4
       $2 = (r1 + r2)
       
      even if (r1 + r2) does not exists in inner expression.
      Parameters:
      allowDeepAssociativity -
    • isAllowDeepAssociativity

      public boolean isAllowDeepAssociativity()
    • setIRDepthsMap

      public void setIRDepthsMap(Map<IEGeneric,Integer> IRDepthsMap)
    • getIRDepthsMap

      public Map<IEGeneric,Integer> getIRDepthsMap()
    • getMatchMap

      public Map<Integer,Object> getMatchMap()
      Retrieve the match map:
      - Key= leaf id
      - Value= matched IRE (IEgeneric) for leaves or operator (OperationType) for operator groups.
      Returns:
    • reset

      public void reset(boolean keepMatches)
    • reset

      public void reset()
    • isMatch

      public boolean isMatch(IEGeneric e)
    • toString

      public String toString()
      Overrides:
      toString in class Object