decompiler
1.0.0
|
A special space for encoding FuncCallSpecs. More...
#include <fspec.hh>
Public Member Functions | |
FspecSpace (AddrSpaceManager *m, const Translate *t, int4 ind) | |
Constructor. More... | |
virtual void | encodeAttributes (Encoder &encoder, uintb offset) const |
Encode address attributes to a stream. More... | |
virtual void | encodeAttributes (Encoder &encoder, uintb offset, int4 size) const |
Encode an address and size attributes to a stream. More... | |
virtual void | printRaw (ostream &s, uintb offset) const |
Write an address in this space to a stream. More... | |
virtual void | saveXml (ostream &s) const |
Write the details of this space as XML. More... | |
virtual void | decode (Decoder &decoder) |
Recover the details of this space from XML. | |
Public Member Functions inherited from ghidra::AddrSpace | |
AddrSpace (AddrSpaceManager *m, const Translate *t, spacetype tp, const string &nm, uint4 size, uint4 ws, int4 ind, uint4 fl, int4 dl) | |
AddrSpace (AddrSpaceManager *m, const Translate *t, spacetype tp) | |
For use with decode. More... | |
virtual | ~AddrSpace (void) |
The address space destructor. | |
const string & | getName (void) const |
Get the name. More... | |
AddrSpaceManager * | getManager (void) const |
Get the space manager. More... | |
const Translate * | getTrans (void) const |
Get the processor translator. More... | |
spacetype | getType (void) const |
Get the type of space. More... | |
int4 | getDelay (void) const |
Get number of heritage passes being delayed. More... | |
int4 | getDeadcodeDelay (void) const |
Get number of passes before deadcode removal is allowed. More... | |
int4 | getIndex (void) const |
Get the integer identifier. More... | |
uint4 | getWordSize (void) const |
Get the addressable unit size. More... | |
uint4 | getAddrSize (void) const |
Get the size of the space. More... | |
uintb | getHighest (void) const |
Get the highest byte-scaled address. More... | |
uintb | getPointerLowerBound (void) const |
Get lower bound for assuming an offset is a pointer. More... | |
uintb | getPointerUpperBound (void) const |
Get upper bound for assuming an offset is a pointer. More... | |
int4 | getMinimumPtrSize (void) const |
Get the minimum pointer size for this space. More... | |
uintb | wrapOffset (uintb off) const |
Wrap -off- to the offset that fits into this space. More... | |
char | getShortcut (void) const |
Get the shortcut character. More... | |
bool | isHeritaged (void) const |
Return true if dataflow has been traced. More... | |
bool | doesDeadcode (void) const |
Return true if dead code analysis should be done on this space. More... | |
bool | hasPhysical (void) const |
Return true if data is physically stored in this. More... | |
bool | isBigEndian (void) const |
Return true if values in this space are big endian. More... | |
bool | isReverseJustified (void) const |
Return true if alignment justification does not match endianness. More... | |
bool | isFormalStackSpace (void) const |
Return true if this is attached to the formal stack pointer. More... | |
bool | isOverlay (void) const |
Return true if this is an overlay space. | |
bool | isOverlayBase (void) const |
Return true if other spaces overlay this space. | |
bool | isOtherSpace (void) const |
Return true if this is the other address space. | |
bool | isTruncated (void) const |
Return true if this space is truncated from its original size. More... | |
bool | hasNearPointers (void) const |
Return true if near (truncated) pointers into this space are possible. | |
void | printOffset (ostream &s, uintb offset) const |
Write an address offset to a stream. More... | |
virtual int4 | numSpacebase (void) const |
Number of base registers associated with this space. More... | |
virtual const VarnodeData & | getSpacebase (int4 i) const |
Get a base register that creates this virtual space. More... | |
virtual const VarnodeData & | getSpacebaseFull (int4 i) const |
Return original spacebase register before truncation. More... | |
virtual bool | stackGrowsNegative (void) const |
Return true if a stack in this space grows negative. More... | |
virtual AddrSpace * | getContain (void) const |
Return this space's containing space (if any) More... | |
virtual int4 | overlapJoin (uintb offset, int4 size, AddrSpace *pointSpace, uintb pointOff, int4 pointSkip) const |
Determine if a given point is contained in an address range in this address space. More... | |
virtual uintb | decodeAttributes (Decoder &decoder, uint4 &size) const |
Recover an offset and size. More... | |
virtual uintb | read (const string &s, int4 &size) const |
Read in an address (and possible size) from a string. More... | |
Static Public Attributes | |
static const string | NAME = "fspec" |
Reserved name for the fspec space. | |
Additional Inherited Members | |
Public Types inherited from ghidra::AddrSpace | |
enum | { big_endian = 1, heritaged = 2, does_deadcode = 4, programspecific = 8, reverse_justification = 16, formal_stackspace = 0x20, overlay = 0x40, overlaybase = 0x80, truncated = 0x100, hasphysical = 0x200, is_otherspace = 0x400, has_nearpointers = 0x800 } |
Static Public Member Functions inherited from ghidra::AddrSpace | |
static uintb | addressToByte (uintb val, uint4 ws) |
Scale from addressable units to byte units. More... | |
static uintb | byteToAddress (uintb val, uint4 ws) |
Scale from byte units to addressable units. More... | |
static int8 | addressToByteInt (int8 val, uint4 ws) |
Scale int4 from addressable units to byte units. More... | |
static int8 | byteToAddressInt (int8 val, uint4 ws) |
Scale int4 from byte units to addressable units. More... | |
static bool | compareByIndex (const AddrSpace *a, const AddrSpace *b) |
Compare two spaces by their index. More... | |
Protected Member Functions inherited from ghidra::AddrSpace | |
void | calcScaleMask (void) |
Calculate scale and mask. More... | |
void | setFlags (uint4 fl) |
Set a cached attribute. More... | |
void | clearFlags (uint4 fl) |
Clear a cached attribute. More... | |
void | saveBasicAttributes (ostream &s) const |
Write the XML attributes of this space. More... | |
void | decodeBasicAttributes (Decoder &decoder) |
Read attributes for this space from an open XML element. More... | |
void | truncateSpace (uint4 newsize) |
Protected Attributes inherited from ghidra::AddrSpace | |
string | name |
Name of this space. | |
uint4 | addressSize |
Size of an address into this space in bytes. | |
uint4 | wordsize |
Size of unit being addressed (1=byte) | |
int4 | minimumPointerSize |
Smallest size of a pointer into this space (in bytes) | |
int4 | index |
An integer identifier for the space. | |
int4 | delay |
Delay in heritaging this space. | |
int4 | deadcodedelay |
Delay before deadcode removal is allowed on this space. | |
A special space for encoding FuncCallSpecs.
It is efficient and convenient to store the main subfunction object (FuncCallSpecs) in the pcode operation which is actually making the call. This address space allows a FuncCallSpecs to be encoded as an address which replaces the formally encoded address of the function being called, when manipulating the operation internally. The space stored in the encoded address is this special fspec space, and the offset is the actual value of the pointer
ghidra::FspecSpace::FspecSpace | ( | AddrSpaceManager * | m, |
const Translate * | t, | ||
int4 | ind | ||
) |
Constructor.
Constructor for the fspec space. There is only one such space, and it is considered internal to the model, i.e. the Translate engine should never generate addresses in this space.
m | is the associated address space manager |
t | is the associated processor translator |
ind | is the index associated with the space |
References ghidra::AddrSpace::big_endian, ghidra::AddrSpace::clearFlags(), ghidra::AddrSpace::does_deadcode, ghidra::AddrSpace::heritaged, ghidra::IPTR_FSPEC, and ghidra::AddrSpace::setFlags().
|
virtual |
Encode address attributes to a stream.
Write the main attributes for an address within this space. The caller provides only the offset, and this routine fills in other details pertaining to this particular space.
encoder | is the stream encoder |
offset | is the offset of the address |
Reimplemented from ghidra::AddrSpace.
References ghidra::FuncCallSpecs::getEntryAddress(), ghidra::Address::getOffset(), ghidra::Address::getSpace(), ghidra::Address::isInvalid(), ghidra::Encoder::writeSpace(), ghidra::Encoder::writeString(), and ghidra::Encoder::writeUnsignedInteger().
|
virtual |
Encode an address and size attributes to a stream.
Write the main attributes of an address with this space and a size. The caller provides the offset and size, and other details about this particular space are filled in.
encoder | is the stream encoder |
offset | is the offset of the address |
size | is the size of the memory location |
Reimplemented from ghidra::AddrSpace.
References ghidra::FuncCallSpecs::getEntryAddress(), ghidra::Address::getOffset(), ghidra::Address::getSpace(), ghidra::Address::isInvalid(), ghidra::Encoder::writeSignedInteger(), ghidra::Encoder::writeSpace(), ghidra::Encoder::writeString(), and ghidra::Encoder::writeUnsignedInteger().
|
virtual |
Write an address in this space to a stream.
This is a printing method for the debugging routines. It prints taking into account the wordsize, adding a "+n" if the offset is not on-cut with wordsize. It also returns the expected/typical size of values from this space.
s | is the stream being written |
offset | is the offset to be printed |
Reimplemented from ghidra::AddrSpace.
References ghidra::FuncCallSpecs::getEntryAddress(), ghidra::FuncCallSpecs::getName(), and ghidra::Address::printRaw().
|
virtual |
Write the details of this space as XML.
Write a tag fully describing the details of this space suitable for later recovery via decode.
s | is the stream being written |
Reimplemented from ghidra::AddrSpace.