Package ghidra.app.util.demangler
Class DemangledObject
- java.lang.Object
-
- ghidra.app.util.demangler.DemangledObject
-
- Direct Known Subclasses:
DemangledAddressTable,DemangledFunction,DemangledString,DemangledThunk,DemangledUnknown,DemangledVariable
public abstract class DemangledObject extends java.lang.ObjectA class to represent a demangled object.
-
-
Field Summary
Fields Change Modifier and Type Field Description NEW protected java.lang.StringbasedNameNEW protected static java.lang.StringEMPTY_STRINGNEW protected booleanisRestrictNEW protected booleanisStaticNEW protected booleanisThunkNEW protected booleanisUnalignedNEW protected booleanisVirtualNEW protected java.lang.StringmemberScopeNEW protected DemangledTypenamespaceNEW protected static java.lang.StringNAMESPACE_SEPARATORNEW protected java.lang.StringoriginalMangledNEW protected static java.lang.StringSPACENEW protected static java.util.regex.PatternSPACE_PATTERNNEW protected java.lang.StringspecialMidfixNEW protected java.lang.StringspecialPrefixNEW protected java.lang.StringspecialSuffixNEW protected java.lang.StringstorageClassNEW protected java.lang.StringutilDemangledNEW protected java.lang.Stringvisibility
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Change Modifier and Type Method Description NEW protected SymbolapplyDemangledName(Address addr, boolean setPrimary, boolean functionNamespacePermitted, Program prog)NEW protected SymbolapplyDemangledName(java.lang.String symbolName, Address addr, boolean setPrimary, boolean functionNamespacePermitted, Program prog)booleanapplyTo(Program program, Address address, DemanglerOptions options, TaskMonitor monitor)NEW protected StructurecreateClassStructure(Program prog, Function func)static NamespacecreateNamespace(Program program, DemangledType typeNamespace, Namespace parentNamespace, boolean functionPermitted)Get or create the specified typeNamespace.NEW protected static java.lang.StringensureNameLength(java.lang.String name)Ensure name does not pass the limit defined by GhidraNEW protected java.lang.StringgeneratePlateComment()java.lang.StringgetBasedName()java.lang.StringgetDemangledName()Returns the unmodified demangled name of this object.java.lang.StringgetMemberScope()java.lang.StringgetName()Returns the demangled name of this object.DemangledTypegetNamespace()Returns the namespace containing this demangled object.abstract java.lang.StringgetSignature(boolean format)Returns a complete signature for the demangled symbol.java.lang.StringgetSpecialMidfix()java.lang.StringgetSpecialPrefix()java.lang.StringgetSpecialSuffix()java.lang.StringgetStorageClass()java.lang.StringgetUtilDemangled()Gets the demangled output from a supplemental utility.java.lang.StringgetVisibility()NEW protected booleanisAlreadyDemangled(Program program, Address address)Determine if the symbol at address has already been demangled.booleanisConst()booleanisPointer64()booleanisRestrict()booleanisStatic()booleanisThunk()booleanisUnaligned()booleanisVirtual()booleanisVolatile()NEW protected java.lang.Stringpad(int len)voidsetBasedName(java.lang.String basedName)voidsetConst(boolean isConst)voidsetMemberScope(java.lang.String memberScope)voidsetName(java.lang.String name)Sets the name of the demangled objectvoidsetNamespace(DemangledType namespace)voidsetOriginalMangled(java.lang.String mangled)Sets the original mangled namevoidsetPointer64(boolean isPointer64)voidsetRestrict()voidsetSignature(java.lang.String signature)Sets the signature.voidsetSpecialMidfix(java.lang.String chargeType)voidsetSpecialPrefix(java.lang.String special)voidsetSpecialSuffix(java.lang.String specialSuffix)voidsetStatic(boolean isStatic)voidsetStorageClass(java.lang.String storageClass)voidsetThunk(boolean isThunk)voidsetUnaligned()voidsetUtilDemangled(java.lang.String utilDemangled)Sets the demangled output from a supplemental utility.voidsetVirtual(boolean isVirtual)voidsetVisibilty(java.lang.String visibility)voidsetVolatile(boolean isVolatile)java.lang.StringtoString()
-
-
-
Field Detail
-
SPACE NEW
protected static final java.lang.String SPACE
- See Also:
- Constant Field Values
-
NAMESPACE_SEPARATOR NEW
protected static final java.lang.String NAMESPACE_SEPARATOR
- See Also:
- Constant Field Values
-
EMPTY_STRING NEW
protected static final java.lang.String EMPTY_STRING
- See Also:
- Constant Field Values
-
namespace NEW
protected DemangledType namespace
Method Detail
-
getDemangledName
public java.lang.String getDemangledName()
Returns the unmodified demangled name of this object. This name may contain whitespace and other characters not supported for symbol or data type creation. SeegetName()for the same name modified for use within Ghidra.- Returns:
- name of this DemangledObject
-
getName
public java.lang.String getName()
Returns the demangled name of this object. NOTE: unsupported symbol characters, like whitespace, will be converted to an underscore.- Returns:
- name of this DemangledObject with unsupported characters converted to underscore
-
isConst
public boolean isConst()
-
setConst
public void setConst(boolean isConst)
-
isVolatile
public boolean isVolatile()
-
setVolatile
public void setVolatile(boolean isVolatile)
-
isPointer64
public boolean isPointer64()
-
setPointer64
public void setPointer64(boolean isPointer64)
-
isStatic
public boolean isStatic()
-
setStatic
public void setStatic(boolean isStatic)
-
isVirtual
public boolean isVirtual()
-
setVirtual
public void setVirtual(boolean isVirtual)
-
isThunk
public boolean isThunk()
-
setThunk
public void setThunk(boolean isThunk)
-
setUnaligned
public void setUnaligned()
-
isUnaligned
public boolean isUnaligned()
-
setRestrict
public void setRestrict()
-
isRestrict
public boolean isRestrict()
-
getBasedName
public java.lang.String getBasedName()
-
setBasedName
public void setBasedName(java.lang.String basedName)
-
getMemberScope
public java.lang.String getMemberScope()
-
setMemberScope
public void setMemberScope(java.lang.String memberScope)
-
setName
public void setName(java.lang.String name)
Sets the name of the demangled object- Parameters:
name- the new name
-
setOriginalMangled
public void setOriginalMangled(java.lang.String mangled)
Sets the original mangled name- Parameters:
mangled- the original mangled name
-
setUtilDemangled
public void setUtilDemangled(java.lang.String utilDemangled)
Sets the demangled output from a supplemental utility.- Parameters:
utilDemangled- the demangled string
-
getUtilDemangled
public java.lang.String getUtilDemangled()
Gets the demangled output from a supplemental utility.- Returns:
- the demangled String created for this object.
-
getNamespace
public DemangledType getNamespace()
Returns the namespace containing this demangled object.- Returns:
- the namespace containing this demangled object
-
setNamespace
public void setNamespace(DemangledType namespace)
-
getVisibility
public java.lang.String getVisibility()
-
setVisibilty
public void setVisibilty(java.lang.String visibility)
-
getStorageClass
public java.lang.String getStorageClass()
-
setStorageClass
public void setStorageClass(java.lang.String storageClass)
-
getSpecialPrefix
public java.lang.String getSpecialPrefix()
-
setSpecialPrefix
public void setSpecialPrefix(java.lang.String special)
-
getSpecialMidfix
public java.lang.String getSpecialMidfix()
-
setSpecialMidfix
public void setSpecialMidfix(java.lang.String chargeType)
-
getSpecialSuffix
public java.lang.String getSpecialSuffix()
-
setSpecialSuffix
public void setSpecialSuffix(java.lang.String specialSuffix)
-
getSignature
public abstract java.lang.String getSignature(boolean format)
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.- Parameters:
format- true if signature should be pretty printed- Returns:
- a complete signature for the demangled symbol
-
setSignature
public void setSignature(java.lang.String signature)
Sets the signature. Calling this method will override the auto-generated signature.- Parameters:
signature- the signature
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
isAlreadyDemangled NEW
protected boolean isAlreadyDemangled(Program program, Address address)
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.- Parameters:
program- the program being modifiedaddress- 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 java.lang.Exception
- Throws:
java.lang.Exception
-
applyDemangledName NEW
protected Symbol applyDemangledName(Address addr, boolean setPrimary, boolean functionNamespacePermitted, Program prog) throws InvalidInputException
- Throws:
InvalidInputException
-
applyDemangledName NEW
protected Symbol applyDemangledName(java.lang.String symbolName, Address addr, boolean setPrimary, boolean functionNamespacePermitted, Program prog) throws InvalidInputException
- Throws:
InvalidInputException
-
createNamespace
public static Namespace createNamespace(Program program, DemangledType typeNamespace, Namespace parentNamespace, boolean functionPermitted)
Get or create the specified typeNamespace. The returned namespace may only be a partial namespace if errors occurred. The caller should check the returned namespace and adjust any symbol creation accordingly. Caller should use#getResidualNamespacePath(DemangledType, Namespace)to handle the case where only a partial namespace has been returned.- Parameters:
program-typeNamespace- demangled namespaceparentNamespace- root namespace to be used (e.g., library, global, etc.)functionPermitted- if true an existing function may be used as a namespace- Returns:
- namespace or partial namespace if error occurs
-
-