Class DecompilerUtils

java.lang.Object
ghidra.app.decompiler.component.DecompilerUtils

public class DecompilerUtils extends Object
  • Constructor Details

    • DecompilerUtils

      public DecompilerUtils()
  • Method Details

    • getDecompileOptions

      public static DecompileOptions getDecompileOptions(ServiceProvider serviceProvider, Program program)
      Gather decompiler options from tool and program. If tool is null or does not provide a OptionsService provider only options stored within the program will be consumed.
      Parameters:
      serviceProvider - plugin tool or service provider providing access to OptionsService
      program - program
      Returns:
      decompiler options
    • getDataTypeTraceForward

      public static DataType getDataTypeTraceForward(Varnode vn)
      Get the data-type associated with a Varnode. If the Varnode is input to a CAST p-code op, take the most specific data-type between what it was cast from and cast to.
      Parameters:
      vn - is the Varnode to get the data-type for
      Returns:
      the data-type
    • getDataTypeTraceBackward

      public static DataType getDataTypeTraceBackward(Varnode vn)
      Get the data-type associated with a Varnode. If the Varnode is produce by a CAST p-code op, take the most specific data-type between what it was cast from and cast to.
      Parameters:
      vn - is the Varnode to get the data-type for
      Returns:
      the data-type
    • getVarnodeRef

      public static Varnode getVarnodeRef(ClangToken token)
      If the token refers to an individual Varnode, return it. Otherwise return null
      Parameters:
      token - the token to check
      Returns:
      the Varnode or null otherwise
    • getForwardSlice

      public static Set<Varnode> getForwardSlice(Varnode seed)
      Construct the set of varnodes making up a simple forward slice of seed
      Parameters:
      seed - Varnode where the slice starts
      Returns:
      set of Varnodes in the slice
    • getBackwardSlice

      public static Set<Varnode> getBackwardSlice(Varnode seed)
    • getForwardSliceToPCodeOps

      public static Set<PcodeOp> getForwardSliceToPCodeOps(Varnode seed)
    • getBackwardSliceToPCodeOps

      public static Set<PcodeOp> getBackwardSliceToPCodeOps(Varnode seed)
    • isThisParameter

      public static boolean isThisParameter(HighVariable var, Function function)
      Test specified variable to see if it corresponds to the auto this parameter of the specified Function
      Parameters:
      var - decompiler variable
      function - decompiled function
      Returns:
      true if var corresponds to existing auto this parameter, else false
    • getFunction

      public static Function getFunction(Program program, ClangFuncNameToken token)
      Returns the function represented by the given token. This will be either the decompiled function or a function referenced within the decompiled function.
      Parameters:
      program - the program
      token - the token
      Returns:
      the function
    • findIndexOfFirstField

      public static int findIndexOfFirstField(List<ClangToken> queryTokens, Field[] fields)
      Find index of first field containing a ClangNode in tokenList
      Parameters:
      queryTokens - the list of tokens of interest
      fields - the universe of fields to check
      Returns:
      index of field, or -1
    • getTokensFromView

      public static List<ClangToken> getTokensFromView(Field[] fields, Address address)
      Similar to getTokens(ClangNode, AddressSetView), but uses the tokens from the given view fields. Sometimes the tokens in the model (represented by the ClangNode) are different than the fields in the view (such as when a list of comment tokens are condensed into a single comment token).
      Parameters:
      fields - the fields to check
      address - the address each returned token must match
      Returns:
      the matching tokens
    • getTokens

      public static List<ClangToken> getTokens(ClangNode root, AddressSetView addressSet)
      Find all ClangNodes that have a minimum address in the AddressSetView
      Parameters:
      root - the root of the token tree
      addressSet - the addresses to restrict
      Returns:
      the list of tokens
    • getTokens

      public static List<ClangToken> getTokens(ClangNode root, Address address)
    • getClosestAddress

      public static Address getClosestAddress(Program program, ClangToken token)
    • findClosestAddressSet

      public static AddressSet findClosestAddressSet(Program program, AddressSpace functionSpace, List<ClangToken> tokenList)
    • getFieldSelection

      public static FieldSelection getFieldSelection(List<ClangToken> tokens)
    • getTokensInSelection

      public static List<ClangToken> getTokensInSelection(FieldSelection selection, Field[] lines)
    • findAddressBefore

      public static Address findAddressBefore(Field[] lines, ClangToken token)
    • getGoToTargetToken

      public static ClangLabelToken getGoToTargetToken(ClangTokenGroup root, ClangLabelToken label)
    • getNextBrace

      public static ClangSyntaxToken getNextBrace(ClangToken startToken, boolean forward)
      Starts at the given token and finds the next enclosing brace, depending on the given direction. If going forward, the next unpaired closing brace will be returned; if going backward, the next enclosing open brace will be found. If no enclosing braces exist, then null is returned.
      Parameters:
      startToken - the starting token
      forward - true for forward; false for backward
      Returns:
      the next enclosing brace or null
    • getMatchingBrace

      public static ClangSyntaxToken getMatchingBrace(ClangSyntaxToken startToken)
      Find the matching brace, '{' or '}', for the given brace token, taking into account brace nesting. For an open brace, search forward to find the corresponding close brace. For a close brace, search backward to find the corresponding open brace.
      Parameters:
      startToken - is the given brace token
      Returns:
      the match brace token or null if there is no match
    • isBrace

      public static boolean isBrace(ClangToken token)
    • isGoToStatement

      public static boolean isGoToStatement(ClangToken token)
    • toLines

      public static List<ClangLine> toLines(ClangTokenGroup group)
      A token hierarchy is flattened and then split into individual lines at the ClangBreak tokens. An array of the lines, each as a ClangLine object that owns its respective tokens, is returned. Sequences of comment tokens are collapsed into a single ClangCommentToken.
      Parameters:
      group - is the token hierarchy
      Returns:
      the array of ClangLine objects
    • getDataType

      public static DataType getDataType(ghidra.app.plugin.core.decompile.DecompilerActionContext context)
      Returns the data type for the given context if the context pertains to a data type
      Parameters:
      context - the context
      Returns:
      the data type or null
    • getDataType

      public static DataType getDataType(ClangToken token)
      Returns the data type for the given token
      Parameters:
      token - the token
      Returns:
      the data type or null