Package ghidra.app.decompiler.component

# Class DecompilerUtils

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

public class DecompilerUtils extends Object

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DecompilerUtils()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static Address`
  `findAddressBefore(Field[] lines, ClangToken token)`
  `static AddressSet`
  `findClosestAddressSet(Program program, AddressSpace functionSpace, List<ClangToken> tokenList)`
  `static int`
  `findIndexOfFirstField(List<ClangToken> queryTokens, Field[] fields)`
  Find index of first field containing a ClangNode in tokenList
  `static Set<Varnode>`
  `getBackwardSlice(Varnode seed)`
  `static Set<PcodeOp>`
  `getBackwardSliceToPCodeOps(Varnode seed)`
  `static Address`
  `getClosestAddress(Program program, ClangToken token)`
  `static DataType`
  `getDataType(ClangToken token)`
  Returns the data type for the given token
  `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
  `static DataType`
  `getDataTypeTraceBackward(Varnode vn)`
  Get the data-type associated with a Varnode.
  `static DataType`
  `getDataTypeTraceForward(Varnode vn)`
  Get the data-type associated with a Varnode.
  `static DecompileOptions`
  `getDecompileOptions(ServiceProvider serviceProvider, Program program)`
  Gather decompiler options from tool and program.
  `static FieldSelection`
  `getFieldSelection(List<ClangToken> tokens)`
  `static Set<Varnode>`
  `getForwardSlice(Varnode seed)`
  Construct the set of varnodes making up a simple forward slice of seed
  `static Set<PcodeOp>`
  `getForwardSliceToPCodeOps(Varnode seed)`
  `static Function`
  `getFunction(Program program, ClangFuncNameToken token)`
  Returns the function represented by the given token.
  `static ClangLabelToken`
  `getGoToTargetToken(ClangTokenGroup root, ClangLabelToken label)`
  `static ClangSyntaxToken`
  `getMatchingBrace(ClangSyntaxToken startToken)`
  Find the matching brace, '{' or '}', for the given brace token, taking into account brace nesting.
  `static ClangSyntaxToken`
  `getNextBrace(ClangToken startToken, boolean forward)`
  Starts at the given token and finds the next enclosing brace, depending on the given direction.
  `static List<ClangToken>`
  `getTokens(ClangNode root, Address address)`
  `static List<ClangToken>`
  `getTokens(ClangNode root, AddressSetView addressSet)`
  Find all ClangNodes that have a minimum address in the AddressSetView
  `static List<ClangToken>`
  `getTokensFromView(Field[] fields, Address address)`
  Similar to `getTokens(ClangNode, AddressSetView)`, but uses the tokens from the given view fields.
  `static List<ClangToken>`
  `getTokensInSelection(FieldSelection selection, Field[] lines)`
  `static Varnode`
  `getVarnodeRef(ClangToken token)`
  If the token refers to an individual Varnode, return it.
  `static boolean`
  `isBrace(ClangToken token)`
  `static boolean`
  `isGoToStatement(ClangToken token)`
  `static boolean`
  `isThisParameter(HighVariable var, Function function)`
  Test specified variable to see if it corresponds to the auto `this` parameter of the specified `Function`
  `static List<ClangLine>`
  `toLines(ClangTokenGroup group)`
  A token hierarchy is flattened and then split into individual lines at the ClangBreak tokens.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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