Package ghidra.program.model.pcode
Class HighFunction
- java.lang.Object
-
- ghidra.program.model.pcode.PcodeSyntaxTree
-
- ghidra.program.model.pcode.HighFunction
-
- All Implemented Interfaces:
PcodeFactory
public class HighFunction extends PcodeSyntaxTree
High-level abstraction associated with a low level function made up of assembly instructions. Based on information the decompiler has produced after working on a function.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringDECOMPILER_TAG_MAP
-
Constructor Summary
Constructors Constructor Description HighFunction(Function function, Language language, CompilerSpec compilerSpec, PcodeDataTypeManager dtManager, boolean showNamespace)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static java.lang.StringbuildFunctionShellXML(java.lang.String name, Address addr)Build the XML representation of only the shell function info not including everything known about the function.java.lang.StringbuildFunctionXML(Address entryPoint, int size)Build an XML string that represents all the information about this HighFunction.static booleanclearNamespace(SymbolTable symtab, Namespace space)static voidcreateLabelSymbol(SymbolTable symtab, Address addr, java.lang.String name, Namespace namespace, SourceType source, boolean useLocalNamespace)static voidcreateNamespaceTag(java.lang.StringBuilder buf, Namespace namespc)static voiddeleteSymbol(SymbolTable symtab, Address addr, java.lang.String name, Namespace space)static NamespacefindCreateNamespace(SymbolTable symtab, Namespace parentspace, java.lang.String name)static NamespacefindCreateOverrideSpace(Function func)static NamespacefindNamespace(SymbolTable symtab, Namespace parent, java.lang.String name)static NamespacefindOverrideSpace(Function func)CompilerSpecgetCompilerSpec()static org.xml.sax.ErrorHandlergetErrorHandler(java.lang.Object errOriginator, java.lang.String targetName)Convert old decompiler tags to new Register variablesFunctiongetFunction()FunctionPrototypegetFunctionPrototype()JumpTable[]getJumpTables()LanguagegetLanguage()LocalSymbolMapgetLocalSymbolMap()HighSymbolgetMappedSymbol(Address addr, Address pcaddr)HighSymbolgetSymbol(int symbolId)voidgrabFromFunction(int default_extrapop, boolean includeDefaultNames, boolean override_extrapop)Populate the information for the HighFunction from the information stored in Ghidra attached to the function.VarnodenewVarnode(int sz, Address addr)Create a new Varnode with the given size an locationVarnodenewVarnode(int sz, Address addr, int id)voidreadXML(XmlPullParser parser)HighVariablesplitOutMergeGroup(HighVariable high, Varnode vn)If a HighVariable consists of more than one (forced) merge group, split out the group that contains vn as a separate HighVariable.static XmlPullParserstringTree(java.io.InputStream xml, org.xml.sax.ErrorHandler handler)Create and XML SAX parse tree from an input XML string TODO: this probably doesn't belong here.static java.lang.StringtagFindExclude(java.lang.String tagname, java.lang.String doc)-
Methods inherited from class ghidra.program.model.pcode.PcodeSyntaxTree
buildStorage, clear, createFromStorage, delete, findInputVarnode, findVarnode, findVarnode, getAddressFactory, getBasicBlocks, getDataTypeManager, getNumVarnodes, getOpRef, getPcodeOp, getPcodeOps, getPcodeOps, getRef, getVarnodes, getVarnodes, getVarnodes, getVbank, insertAfter, insertBefore, locRange, newOp, readXMLVarnodePieces, setAddrTied, setDataType, setInput, setInput, setMergeGroup, setOpcode, setOutput, setPersistant, setUnaffected, unInsert, unlink, unSetInput, unSetOutput
-
-
-
-
Field Detail
-
DECOMPILER_TAG_MAP
public static final java.lang.String DECOMPILER_TAG_MAP
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
HighFunction
public HighFunction(Function function, Language language, CompilerSpec compilerSpec, PcodeDataTypeManager dtManager, boolean showNamespace)
- Parameters:
function- function associated with the higher level function abstraction.langParser- language parser used to disassemble/get info on the languagedtManager- data type managershowNamespace- true signals to print function names with their namespace
-
-
Method Detail
-
getFunction
public Function getFunction()
- Returns:
- get the associated low level function
-
getLanguage
public Language getLanguage()
- Returns:
- get the language parser used to disassemble
-
getCompilerSpec
public CompilerSpec getCompilerSpec()
-
getFunctionPrototype
public FunctionPrototype getFunctionPrototype()
- Returns:
- the function prototype for the function (how things are passed/returned)
-
getJumpTables
public JumpTable[] getJumpTables()
- Returns:
- an array of jump table definitions found for this function decompilation
-
getLocalSymbolMap
public LocalSymbolMap getLocalSymbolMap()
- Returns:
- the local variable map describing the defined local variables
-
getMappedSymbol
public HighSymbol getMappedSymbol(Address addr, Address pcaddr)
-
getSymbol
public HighSymbol getSymbol(int symbolId)
- Specified by:
getSymbolin interfacePcodeFactory- Overrides:
getSymbolin classPcodeSyntaxTree
-
grabFromFunction
public void grabFromFunction(int default_extrapop, boolean includeDefaultNames, boolean override_extrapop)Populate the information for the HighFunction from the information stored in Ghidra attached to the function.- Parameters:
default_extrapop-includeDefaultNames-override_extrapop-
-
newVarnode
public Varnode newVarnode(int sz, Address addr)
Description copied from interface:PcodeFactoryCreate a new Varnode with the given size an location- Specified by:
newVarnodein interfacePcodeFactory- Overrides:
newVarnodein classPcodeSyntaxTree- Parameters:
sz- size of varnodeaddr- location of varnode- Returns:
- a new varnode
-
newVarnode
public Varnode newVarnode(int sz, Address addr, int id)
- Specified by:
newVarnodein interfacePcodeFactory- Overrides:
newVarnodein classPcodeSyntaxTree
-
readXML
public void readXML(XmlPullParser parser) throws PcodeXMLException
- Overrides:
readXMLin classPcodeSyntaxTree- Throws:
PcodeXMLException
-
splitOutMergeGroup
public HighVariable splitOutMergeGroup(HighVariable high, Varnode vn) throws PcodeException
If a HighVariable consists of more than one (forced) merge group, split out the group that contains vn as a separate HighVariable. Otherwise just return the original high.- Parameters:
high- is the HighVariable to splitvn- is a representative of the merge group to split out- Returns:
- a HighVariable containing just the forced merge group of vn
- Throws:
PcodeException
-
buildFunctionXML
public java.lang.String buildFunctionXML(Address entryPoint, int size)
Build an XML string that represents all the information about this HighFunction.- Parameters:
entryPoint- pass null to use the function entryPoint, pass an address to force an entry point- Returns:
- the XML string
-
buildFunctionShellXML
public static java.lang.String buildFunctionShellXML(java.lang.String name, Address addr)Build the XML representation of only the shell function info not including everything known about the function.- Parameters:
name- name of the functionaddr- address the function is located at- Returns:
- the XML string
-
getErrorHandler
public static org.xml.sax.ErrorHandler getErrorHandler(java.lang.Object errOriginator, java.lang.String targetName)Convert old decompiler tags to new Register variables
-
findNamespace
public static Namespace findNamespace(SymbolTable symtab, Namespace parent, java.lang.String name)
-
createLabelSymbol
public static void createLabelSymbol(SymbolTable symtab, Address addr, java.lang.String name, Namespace namespace, SourceType source, boolean useLocalNamespace) throws InvalidInputException
- Throws:
InvalidInputException
-
deleteSymbol
public static void deleteSymbol(SymbolTable symtab, Address addr, java.lang.String name, Namespace space) throws InvalidInputException
- Throws:
InvalidInputException
-
clearNamespace
public static boolean clearNamespace(SymbolTable symtab, Namespace space) throws InvalidInputException
- Throws:
InvalidInputException
-
findCreateNamespace
public static Namespace findCreateNamespace(SymbolTable symtab, Namespace parentspace, java.lang.String name)
-
stringTree
public static XmlPullParser stringTree(java.io.InputStream xml, org.xml.sax.ErrorHandler handler) throws PcodeXMLException
Create and XML SAX parse tree from an input XML string TODO: this probably doesn't belong here.- Parameters:
xml- string to parse- Returns:
- an XML tree element
- Throws:
PcodeXMLException
-
createNamespaceTag
public static void createNamespaceTag(java.lang.StringBuilder buf, Namespace namespc)
-
tagFindExclude
public static java.lang.String tagFindExclude(java.lang.String tagname, java.lang.String doc)- Parameters:
tagname- -- Name of tag to search fordoc- -- String through which to search for tags- Returns:
- all characters between beginning and ending XML tags, excluding tags themselves
-
-