Package ghidra.app.util.bin.format.dwarf
Class DWARFUtil
java.lang.Object
ghidra.app.util.bin.format.dwarf.DWARFUtil
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic void
appendComment
(Program program, Address address, int commentType, String prefix, String comment, String sep) static void
appendDescription
(DataTypeComponent dtc, String description, String sep) Append a string to a description of a field in a structure.static void
appendDescription
(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 String
Creates a name for anon types based on their position in their parent's childList.static String
Creates a name for anon types based on the names of sibling entries that are using the anon type.static CodeUnit
getCodeUnitForComment
(Program program, Address address) static ResourceFile
Returns the base directory of a language definition.static ResourceFile
getLanguageExternalFile
(Language lang, String name) Returns a file that has been referenced in the specifiedlanguage's
ldefs description via astatic String
getLanguageExternalNameValue
(Language lang, String name) Returns a value specified in aLanguage
definition via astatic Field
getStaticFinalFieldWithValue
(Class<?> clazz, long value) Searches a Class for a final static variable that has a specific numeric value.static String
Creates a fingerprint of the layout of an (anonymous) structure using its size, number of members, and the hashcode of the member field names.static String
getTemplateBaseName
(String name) Determines if a name is a C++ style templated name.static boolean
isEmptyArray
(DataType dt) static boolean
static boolean
isPointerTo
(DIEAggregate targetDIEA, DIEAggregate testDIEA) static boolean
isStackVarnode
(Varnode varnode) static boolean
isThisParam
(DIEAggregate paramDIEA) static boolean
static boolean
static void
packCompositeIfPossible
(Composite original, DataTypeManager dtm) A lightweight attempt to get nesting (ie.static String
Converts a integer value to its corresponding symbolic name from the set of "public static final" member variables in a class.static String
Returns the field name of a final static variable in classclazz
which 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
- TheClass
to 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 classclazz
which 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
Field
that has the specified value or null
-
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)
-
appendDescription
Append a string to aDataType
's description.- Parameters:
dt
-DataType
description
- 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
- thefield
in 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
-
isThisParam
-
isPointerTo
-
isPointerDataType
-
getLanguageExternalFile
Returns a file that has been referenced in the specifiedlanguage's
ldefs description via a<external_name tool="name" name="value"/>
entry.- Parameters:
lang
-Language
to queryname
- name of the option in the ldefs file- Returns:
- file pointed to by the specified external_name tool entry
- Throws:
IOException
- if not a sleigh lang
-
getLanguageDefinitionDirectory
Returns the base directory of a language definition.- Parameters:
lang
-Language
to get base definition directory- Returns:
- base directory for language definition files
- Throws:
IOException
- if not a sleigh lang
-
getLanguageExternalNameValue
Returns a value specified in aLanguage
definition via a<external_name tool="name" name="value"/>
entry.- Parameters:
lang
-Language
to queryname
- name of the value- Returns:
- String value
- Throws:
IOException
-
packCompositeIfPossible
-
convertRegisterListToVarnodeStorage
-
isEmptyArray
-
isZeroByteDataType
-
isVoid
-
isStackVarnode
-