Package ghidra.program.model.pcode
Class PcodeSyntaxTree
- java.lang.Object
-
- ghidra.program.model.pcode.PcodeSyntaxTree
-
- All Implemented Interfaces:
PcodeFactory
- Direct Known Subclasses:
HighFunction,HighParamID
public class PcodeSyntaxTree extends java.lang.Object implements PcodeFactory
Varnodes and PcodeOps in a coherent graph structure
-
-
Constructor Summary
Constructors Constructor Description PcodeSyntaxTree(AddressFactory afact, PcodeDataTypeManager dtmanage)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description VariableStoragebuildStorage(Varnode vn)voidclear()VarnodecreateFromStorage(Address addr, VariableStorage storage, int logicalSize)voiddelete(PcodeOp op)VarnodefindInputVarnode(int sz, Address addr)return Varnode of given size and starting Address, which is also an inputVarnodefindVarnode(int sz, Address addr, Address pc)return first instance of a Varnode with given size, starting Address, and bound to an instruction at the given AddressVarnodefindVarnode(int sz, Address addr, SequenceNumber sq)return Varnode of given size and starting Address defined by a PcodeOp with a given SequenceNumberAddressFactorygetAddressFactory()java.util.ArrayList<PcodeBlockBasic>getBasicBlocks()PcodeDataTypeManagergetDataTypeManager()intgetNumVarnodes()PcodeOpgetOpRef(int id)PcodeOpgetPcodeOp(SequenceNumber sq)java.util.Iterator<PcodeOpAST>getPcodeOps()return all PcodeOps (alive or dead) ordered by SequenceNumberjava.util.Iterator<PcodeOpAST>getPcodeOps(Address addr)return all PcodeOps associated with a particular instruction AddressVarnodegetRef(int id)HighSymbolgetSymbol(int symbolId)java.util.Iterator<VarnodeAST>getVarnodes(int sz, Address addr)return all Varnodes of a given size that start at a given Addressjava.util.Iterator<VarnodeAST>getVarnodes(Address addr)return all Varnodes that start at a given Addressjava.util.Iterator<VarnodeAST>getVarnodes(AddressSpace spc)return Iterator to all Varnodes in the indicated AddressSpaceVarnodeBankgetVbank()Deprecated.voidinsertAfter(PcodeOp newop, PcodeOp prev)voidinsertBefore(PcodeOp newop, PcodeOp follow)java.util.Iterator<VarnodeAST>locRange()Returns an iterator for all Varnodes in the tree ordered by AddressPcodeOpnewOp(SequenceNumber sq, int opc, java.util.ArrayList<Varnode> inputs, Varnode output)VarnodenewVarnode(int sz, Address addr)Create a new Varnode with the given size an locationVarnodenewVarnode(int sz, Address addr, int id)voidreadXML(XmlPullParser parser)VariableStoragereadXMLVarnodePieces(XmlElement el, Address addr)Read an XML join address with "piece" attributesvoidsetAddrTied(Varnode vn, boolean val)voidsetDataType(Varnode vn, DataType type)voidsetInput(PcodeOp op, Varnode vn, int slot)VarnodesetInput(Varnode vn, boolean val)voidsetMergeGroup(Varnode vn, short val)voidsetOpcode(PcodeOp op, int opc)voidsetOutput(PcodeOp op, Varnode vn)voidsetPersistant(Varnode vn, boolean val)voidsetUnaffected(Varnode vn, boolean val)voidunInsert(PcodeOp op)voidunlink(PcodeOpAST op)voidunSetInput(PcodeOp op, int slot)voidunSetOutput(PcodeOp op)
-
-
-
Constructor Detail
-
PcodeSyntaxTree
public PcodeSyntaxTree(AddressFactory afact, PcodeDataTypeManager dtmanage)
-
-
Method Detail
-
clear
public void clear()
-
readXMLVarnodePieces
public VariableStorage readXMLVarnodePieces(XmlElement el, Address addr) throws PcodeXMLException, InvalidInputException
Read an XML join address with "piece" attributes- Specified by:
readXMLVarnodePiecesin interfacePcodeFactory- Parameters:
el- SAX parse tree elementaddr- join address associated with pieces- Returns:
- the VariableStorage associated with xml
- Throws:
PcodeXMLExceptionInvalidInputException
-
buildStorage
public VariableStorage buildStorage(Varnode vn) throws InvalidInputException
- Specified by:
buildStoragein interfacePcodeFactory- Throws:
InvalidInputException
-
locRange
public java.util.Iterator<VarnodeAST> locRange()
Returns an iterator for all Varnodes in the tree ordered by Address
-
getVarnodes
public java.util.Iterator<VarnodeAST> getVarnodes(AddressSpace spc)
return Iterator to all Varnodes in the indicated AddressSpace- Parameters:
spc- -- AddressSpace to restrict Iterator to- Returns:
- -- Iterator to Varnodes
-
getVarnodes
public java.util.Iterator<VarnodeAST> getVarnodes(Address addr)
return all Varnodes that start at a given Address- Parameters:
addr- -- Address of Varnodes- Returns:
- -- Iterator to Varnodes
-
getVarnodes
public java.util.Iterator<VarnodeAST> getVarnodes(int sz, Address addr)
return all Varnodes of a given size that start at a given Address- Parameters:
sz- -- Size of Varnodesaddr- -- Starting Address of Varnodes- Returns:
- -- Iterator to Varnodes
-
findVarnode
public Varnode findVarnode(int sz, Address addr, Address pc)
return first instance of a Varnode with given size, starting Address, and bound to an instruction at the given Address- Parameters:
sz- -- size of Varnodeaddr- -- starting Address of Varnodepc- -- Address of instruction writing to Varnode- Returns:
- -- the Varnode
-
findVarnode
public Varnode findVarnode(int sz, Address addr, SequenceNumber sq)
return Varnode of given size and starting Address defined by a PcodeOp with a given SequenceNumber- Parameters:
sz- -- size of Varnodeaddr- -- starting Address of Varnodesq- -- SequenceNumber of PcodeOp defining the Varnode- Returns:
- -- the Varnode
-
findInputVarnode
public Varnode findInputVarnode(int sz, Address addr)
return Varnode of given size and starting Address, which is also an input- Parameters:
sz- -- size of Varnodeaddr- -- starting Address of Varnode- Returns:
- -- the Varnode
-
getNumVarnodes
public int getNumVarnodes()
-
getPcodeOps
public java.util.Iterator<PcodeOpAST> getPcodeOps()
return all PcodeOps (alive or dead) ordered by SequenceNumber- Returns:
- -- Iterator to PcodeOps
-
getPcodeOps
public java.util.Iterator<PcodeOpAST> getPcodeOps(Address addr)
return all PcodeOps associated with a particular instruction Address- Parameters:
addr- -- Address of instruction generating PcodeOps- Returns:
- -- Iterator to PcodeOps
-
getPcodeOp
public PcodeOp getPcodeOp(SequenceNumber sq)
-
getVbank
@Deprecated public VarnodeBank getVbank()
Deprecated.- Returns:
- the varnode bank for this syntax tree
-
getBasicBlocks
public java.util.ArrayList<PcodeBlockBasic> getBasicBlocks()
-
getAddressFactory
public AddressFactory getAddressFactory()
- Specified by:
getAddressFactoryin interfacePcodeFactory- Returns:
- Address factory
-
getDataTypeManager
public PcodeDataTypeManager getDataTypeManager()
- Specified by:
getDataTypeManagerin interfacePcodeFactory- Returns:
- pcode data type manager used to convert strings to Ghidra data types
-
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- 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
-
createFromStorage
public Varnode createFromStorage(Address addr, VariableStorage storage, int logicalSize)
- Specified by:
createFromStoragein interfacePcodeFactory
-
setInput
public Varnode setInput(Varnode vn, boolean val)
- Specified by:
setInputin interfacePcodeFactory
-
getRef
public Varnode getRef(int id)
- Specified by:
getRefin interfacePcodeFactory
-
getSymbol
public HighSymbol getSymbol(int symbolId)
- Specified by:
getSymbolin interfacePcodeFactory
-
setDataType
public void setDataType(Varnode vn, DataType type)
- Specified by:
setDataTypein interfacePcodeFactory
-
setAddrTied
public void setAddrTied(Varnode vn, boolean val)
- Specified by:
setAddrTiedin interfacePcodeFactory
-
setPersistant
public void setPersistant(Varnode vn, boolean val)
- Specified by:
setPersistantin interfacePcodeFactory
-
setUnaffected
public void setUnaffected(Varnode vn, boolean val)
- Specified by:
setUnaffectedin interfacePcodeFactory
-
setMergeGroup
public void setMergeGroup(Varnode vn, short val)
- Specified by:
setMergeGroupin interfacePcodeFactory
-
getOpRef
public PcodeOp getOpRef(int id)
- Specified by:
getOpRefin interfacePcodeFactory
-
setOpcode
public void setOpcode(PcodeOp op, int opc)
-
unSetOutput
public void unSetOutput(PcodeOp op)
-
unSetInput
public void unSetInput(PcodeOp op, int slot)
-
unInsert
public void unInsert(PcodeOp op)
-
delete
public void delete(PcodeOp op)
-
unlink
public void unlink(PcodeOpAST op)
-
newOp
public PcodeOp newOp(SequenceNumber sq, int opc, java.util.ArrayList<Varnode> inputs, Varnode output) throws UnknownInstructionException
- Specified by:
newOpin interfacePcodeFactory- Throws:
UnknownInstructionException
-
readXML
public void readXML(XmlPullParser parser) throws PcodeXMLException
- Throws:
PcodeXMLException
-
-