Class DemangledFunction

java.lang.Object
ghidra.app.util.demangler.DemangledObject
ghidra.app.util.demangler.DemangledFunction
All Implemented Interfaces:
Demangled
Direct Known Subclasses:
DemangledLambda

public class DemangledFunction extends DemangledObject
A class to represent a demangled function.
  • Field Details

  • Constructor Details

    • DemangledFunction

      public DemangledFunction(String mangled, String originalDemangled, String name)
      Create a DemangledFunction instance which is marked with a signature SourceType of SourceType.ANALYSIS which will be used when function signatures are applied to a program. This source type may be changed if needed using setSignatureSourceType(SourceType). The function name and namespace is always applied using a symbol source of SourceType.ANALYSIS.
      Parameters:
      mangled - original mangled symbol name
      originalDemangled - demangled function signature generally used when generating comments
      name - demangled function name
  • Method Details

    • setSignatureSourceType

      public void setSignatureSourceType(SourceType signatureSourceType)
      Set signature SourceType of SourceType.ANALYSIS which will be used when function signatures are applied to a program. Specifying SourceType.DEFAULT will prevent function return and parameters from being applied but will still apply calling convention name if specified.
      Parameters:
      signatureSourceType - signature source type
    • getSignatureSourceType

      public SourceType getSignatureSourceType()
      Get the signature source type which is used when applying the function signature to a program. A value of SourceType.DEFAULT indicates that function return and parameters should not be applied.
      Returns:
      signature source type
    • setReturnType

      public void setReturnType(DemangledDataType returnType)
      Sets the function return type.
      Parameters:
      returnType - the function return type
    • setCallingConvention

      public void setCallingConvention(String callingConvention)
      Sets the function calling convention. For example, "__cdecl".
      Parameters:
      callingConvention - the function calling convention
    • setTemplate

      public void setTemplate(DemangledTemplate template)
    • getTemplate

      public DemangledTemplate getTemplate()
    • setOverloadedOperator

      public void setOverloadedOperator(boolean isOverloadedOperator)
      Sets whether this demangled function represents an overloaded operator. For example, "operator+()".
      Parameters:
      isOverloadedOperator - true if overloaded operator
    • addParameter

      public void addParameter(DemangledParameter parameter)
    • addParameters

      public void addParameters(List<DemangledParameter> params)
    • getParameters

      public List<DemangledParameter> getParameters()
    • getReturnType

      public DemangledDataType getReturnType()
      Returns the return type or null, if unspecified.
      Returns:
      the return type or null, if unspecified
    • getCallingConvention

      public String getCallingConvention()
      Returns the calling convention or null, if unspecified.
      Returns:
      the calling convention or null, if unspecified
    • setTemplatedConstructorType

      public void setTemplatedConstructorType(String type)
      Special constructor where it has a templated type before the parameter list
      Parameters:
      type - the type
    • isTrailingConst

      public boolean isTrailingConst()
    • setTrailingConst

      public void setTrailingConst()
    • isTrailingVolatile

      public boolean isTrailingVolatile()
    • setTrailingVolatile

      public void setTrailingVolatile()
    • isTrailingPointer64

      public boolean isTrailingPointer64()
    • setTrailingPointer64

      public void setTrailingPointer64()
    • isTrailingUnaligned

      public boolean isTrailingUnaligned()
    • setTrailingUnaligned

      public void setTrailingUnaligned()
    • isTrailingRestrict

      public boolean isTrailingRestrict()
    • setTrailingRestrict

      public void setTrailingRestrict()
    • isTypeCast

      public boolean isTypeCast()
    • setTypeCast

      public void setTypeCast()
    • setThrowAttribute

      public void setThrowAttribute(String throwAttribute)
    • getSignature

      public String getSignature(boolean format)
      Description copied from class: DemangledObject
      Returns a complete signature for the demangled symbol.
      For example: "unsigned long foo" "unsigned char * ClassA::getFoo(float, short *)" "void * getBar(int **, MyStruct &)"
      Note: based on the underlying mangling scheme, the return type may or may not be specified in the signature.
      Specified by:
      getSignature in class DemangledObject
      Parameters:
      format - true if signature should be pretty printed
      Returns:
      a complete signature for the demangled symbol
    • addParameters

      protected void addParameters(StringBuilder buffer, boolean format)
    • getNamespaceName

      public String getNamespaceName()
      Description copied from interface: Demangled
      Returns this object's namespace name without the fully-qualified parent path. The value returned here may have had some special characters replaced, such as ' ' replaced with '_' and '::' replaced with '--'.
      Specified by:
      getNamespaceName in interface Demangled
      Overrides:
      getNamespaceName in class DemangledObject
      Returns:
      the name
    • getParameterString

      public String getParameterString()
    • isAlreadyDemangled

      protected boolean isAlreadyDemangled(Program program, Address address)
      Description copied from class: DemangledObject
      Determine if the symbol at address has already been demangled. While memory symbols check for presence of demangledName, external symbols simply check if demangled/alternate name has already been assigned.
      Overrides:
      isAlreadyDemangled in class DemangledObject
      Parameters:
      program - the program being modified
      address - address of demangled symbol
      Returns:
      true if symbol at address has already been demangled
    • applyTo

      public boolean applyTo(Program program, Address address, DemanglerOptions options, TaskMonitor monitor) throws Exception
      Description copied from class: DemangledObject
      Apply this demangled object detail to the specified program.
      NOTE: An open Program transaction must be established prior to invoking this method.
      Overrides:
      applyTo in class DemangledObject
      Parameters:
      program - program to which demangled data should be applied.
      address - address which corresponds to this demangled object
      options - options which control how demangled data is applied
      monitor - task monitor
      Returns:
      true if successfully applied, else false
      Throws:
      Exception - if an error occurs during the apply operation
    • isDefinedFunctionDataTypes

      protected boolean isDefinedFunctionDataTypes(Function func)
      check if the return/param data types were defined by better than analysis (user, import)
      Parameters:
      func - the function to check
      Returns:
      true if the parameters are not undefined, or are of a higher source type.
    • maybeCreateClassStructure

      protected Structure maybeCreateClassStructure(Program program, Function function, String convention)
    • createFunction

      protected Function createFunction(Program prog, Address addr, boolean doDisassembly, TaskMonitor monitor) throws DemangledException
      Throws:
      DemangledException