Class DWARFUtil
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidappendComment(Program program, Address address, int commentType, String prefix, String comment, String sep) static voidappendDescription(DataTypeComponent dtc, String description, String sep) Append a string to a description of a field in a structure.static voidappendDescription(DataType dt, String description, String sep) Append a string to aDataType's description.convertRegisterListToVarnodeStorage(List<Register> registers, int dataTypeSize) Try to find gnu mangled name nesting info in a DIE's children's linkage strings.static StringCreates a name for anon types based on their position in their parent's childList.static StringCreates a name for anon types based on the names of sibling entries that are using the anon type.static CodeUnitgetCodeUnitForComment(Program program, Address address) static StringReturns a string that describes what kind of object is specified by theDIEAggregate.static ResourceFileReturns the base directory of a language definition.static ResourceFilegetLanguageExternalFile(Language lang, String name) Returns a file that has been referenced in the specifiedlanguage'sldefs description via astatic StringgetLanguageExternalNameValue(Language lang, String name) Returns a value specified in aLanguagedefinition via astatic StringCreate a name for a lexical block, with "_" separated numbers indicating nesting information of the lexical block.static intReturns the ordinal position of thisDebugInfoEntryin it's parent.static DIEAggregateReturns theDIEAggregateof a typedef that points to the specified datatype.static FieldgetStaticFinalFieldWithValue(Class<?> clazz, long value) Searches a Class for a final static variable that has a specific numeric value.static StringCreates a fingerprint of the layout of an (anonymous) structure using its size, number of members, and the hashcode of the member field names.static SymbolTypeReturns theSymbolTypethat corresponds to the specifiedDIEAggregate.static StringgetTemplateBaseName(String name) Determines if a name is a C++ style templated name.static booleanisEmptyArray(DataType dt) static booleanstatic booleanisPointerTo(DIEAggregate targetDIEA, DIEAggregate testDIEA) static booleanisStackVarnode(Varnode varnode) static booleanisThisParam(DIEAggregate paramDIEA) static booleanstatic booleanstatic voidpackCompositeIfPossible(Composite original, DataTypeManager dtm) A lightweight attempt to get nesting (ie.static longreadAddressAsLong(BinaryReader reader, byte pointerSize) Reads a variable-sized unsigned 'address' value from aBinaryReaderand returns it as a 64 bit java long.static DWARFUtil.LengthResultreadLength(BinaryReader reader, Program program) Read a variable-length length value from the stream.static longreadOffsetByDWARFformat(BinaryReader reader, int dwarfFormat) Read an offset value who's size depends on the DWARF format: 32 vs 64.static intreadVarSizedUInt(BinaryReader reader, int size) Read a variable-sized unsigned integer and return it as a java signed int.static longreadVarSizedULong(BinaryReader reader, int pointerSize) Read a variable-sized unsigned integer and return it as a java signed long.static StringConverts a integer value to its corresponding symbolic name from the set of "public static final" member variables in a class.static StringReturns the field name of a final static variable in classclazzwhich holds a specific value.
-
Constructor Details
-
DWARFUtil
public DWARFUtil()
-
-
Method Details
-
toString
Converts a integer value to its corresponding symbolic name from the set of "public static final" member variables in a class.This is a bit of a hack and probably originated from pre-java Enum days.
- Parameters:
clazz- TheClassto search for the matching static value.value- the integer value to search for- Returns:
- the String name of the matching field.
-
toString
Returns the field name of a final static variable in classclazzwhich holds a specific value.Can be thought of as an enum numeric value to to name lookup.
- Parameters:
clazz-value-- Returns:
-
getStaticFinalFieldWithValue
Searches a Class for a final static variable that has a specific numeric value.- Parameters:
clazz- Class to search.value- numeric value to search for- Returns:
- Java reflection
Fieldthat has the specified value or null
-
getContainerTypeName
Returns a string that describes what kind of object is specified by theDIEAggregate.Used to create a name for anonymous types.
- Parameters:
diea-DIEAggregate- Returns:
- String describing the type of the DIEA.
-
getSymbolTypeFromDIE
Returns theSymbolTypethat corresponds to the specifiedDIEAggregate.The mapping between DIE type and SymbolType is not exact. There is no matching SymbolType for a DWARF static variable, so "LOCAL_VAR" is used currently.
This mainly is used in constructing a NamespacePath, and the only critical usage there is Namespace vs. Class vs. everything else.
- Parameters:
diea-DIEAggregateto query- Returns:
SymbolType
-
parseMangledNestings
A lightweight attempt to get nesting (ie. namespaces and such) information from gnu mangled name strings.For example, "_ZN19class1_inline_funcs3fooEv" -> [19 chars]'class1_inline_funcs', [3 chars]'foo'
- Parameters:
s-- Returns:
-
findLinkageNameInChildren
Try to find gnu mangled name nesting info in a DIE's children's linkage strings.- Parameters:
die-- Returns:
- a list of string of nesting names, ending with what should be the DIE parameter's name.
-
getTemplateBaseName
Determines if a name is a C++ style templated name. If so, returns just the base portion of the name. The name must have a start and end angle bracket: '<' and '>'.operator<() and operator<<() are handled so their angle brackets don't trigger the template start/end angle bracket incorrectly.
- Parameters:
name- symbol name with C++ template portions- Returns:
- base portion of the symbol name without template portion
-
getAnonNameForMeFromParentContext
Creates a name for anon types based on their position in their parent's childList.- Parameters:
diea- the die aggregate.- Returns:
- the anonymous name of the die aggregate.
-
getAnonNameForMeFromParentContext2
Creates a name for anon types based on the names of sibling entries that are using the anon type.Example: "anon_struct_for_field1_field2"
Falls back to
getAnonNameForMeFromParentContext(DIEAggregate)if no siblings found.- Parameters:
diea- the die aggregate.- Returns:
- the anonymous name of the die aggregate.
-
getStructLayoutFingerprint
Creates a fingerprint of the layout of an (anonymous) structure using its size, number of members, and the hashcode of the member field names.- Parameters:
diea- struct/union/class- Returns:
- formatted string, example "80_5_73dc6de9" (80 bytes, 5 fields, hex hash of field names)
-
getLexicalBlockName
Create a name for a lexical block, with "_" separated numbers indicating nesting information of the lexical block.- Parameters:
diea-DIEAggregatepointing to a lexical block entry.- Returns:
- string, ie. "lexical_block_1_2_3"
-
getMyPositionInParent
Returns the ordinal position of thisDebugInfoEntryin it's parent.- Parameters:
die-DebugInfoEntry- Returns:
- int index of ourself in our parent, or -1 if not found in parent.
-
appendDescription
Append a string to aDataType's description.- Parameters:
dt-DataTypedescription- string to append, if null or empty nothing happens.sep- characters to place after previous description to separate it from the new portion.
-
appendDescription
Append a string to a description of a field in a structure.- Parameters:
dtc- thefieldin a structdescription- string to append, if null or empty nothing happens.sep- characters to place after previous description to separate it from the new portion.
-
appendComment
-
getCodeUnitForComment
-
readOffsetByDWARFformat
Read an offset value who's size depends on the DWARF format: 32 vs 64.- Parameters:
reader- BinaryReader pointing to the value to readdwarfFormat- - SeeDWARFCompilationUnit.DWARF_32andDWARFCompilationUnit.DWARF_64.- Returns:
- the offset value
- Throws:
IOException- if an I/O error occurs or bad dwarfFormat value
-
readVarSizedULong
Read a variable-sized unsigned integer and return it as a java signed long.- Parameters:
reader-BinaryReaderto read the data frompointerSize- number of bytes the value is stored in, must be 1, 2, 4, or 8.- Returns:
- unsigned long integer value.
- Throws:
IOException- if error
-
readVarSizedUInt
Read a variable-sized unsigned integer and return it as a java signed int.Unsigned 32 bit int values larger than java's signed Integer.MAX_VALUE are not supported and will throw an IOException.
- Parameters:
reader-BinaryReaderto read the data fromsize- number of bytes the integer value is stored in, must be 1, 2 or 4.- Returns:
- unsigned integer value.
- Throws:
IOException- if error
-
readAddressAsLong
Reads a variable-sized unsigned 'address' value from aBinaryReaderand returns it as a 64 bit java long.The valid pointerSizes are 1, 2, 4, and 8.
- Parameters:
reader-BinaryReaderto read the data frompointerSize- number of bytes the value is stored in, must be 1, 2, 4, or 8.- Returns:
- unsigned long value.
- Throws:
IOException- if error
-
isThisParam
-
isPointerTo
-
isPointerDataType
-
getReferringTypedef
Returns theDIEAggregateof a typedef that points to the specified datatype.Returns null if there is no typedef pointing to the specified DIEA or if there are multiple.
- Parameters:
diea-DIEAggregateof a data type that might be the target of typedefs.- Returns:
DIEAggregateof the singular typedef that points to the arg, otherwise null if none or multiple found.
-
readLength
public static DWARFUtil.LengthResult readLength(BinaryReader reader, Program program) throws IOException, DWARFException Read a variable-length length value from the stream.- Parameters:
reader-BinaryReaderstream to read fromprogram- GhidraProgram- Returns:
- new
DWARFUtil.LengthResult, never null; length == 0 should be checked for and treated specially - Throws:
IOException- if io errorDWARFException- if invalid values
-
getLanguageExternalFile
Returns a file that has been referenced in the specifiedlanguage'sldefs description via a<external_name tool="name" name="value"/>
entry.- Parameters:
lang-Languageto queryname- name of the option in the ldefs file- Returns:
- file pointed to by the specified external_name tool entry
- Throws:
IOException
-
getLanguageDefinitionDirectory
Returns the base directory of a language definition.- Parameters:
lang-Languageto get base definition directory- Returns:
- base directory for language definition files
- Throws:
IOException
-
getLanguageExternalNameValue
Returns a value specified in aLanguagedefinition via a<external_name tool="name" name="value"/>
entry.- Parameters:
lang-Languageto queryname- name of the value- Returns:
- String value
- Throws:
IOException
-
packCompositeIfPossible
-
convertRegisterListToVarnodeStorage
-
isEmptyArray
-
isZeroByteDataType
-
isVoid
-
isStackVarnode
-