decompiler
1.0.0
|
An overlay space. More...
#include <space.hh>
Public Member Functions | |
OverlaySpace (AddrSpaceManager *m, const Translate *t) | |
Constructor. More... | |
AddrSpace * | getBaseSpace (void) const |
Get the address space being overlayed. More... | |
virtual void | saveXml (ostream &s) const |
Write the details of this space as XML. More... | |
virtual void | restoreXml (const Element *el) |
Recover the details of this space from XML. More... | |
Public Member Functions inherited from 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 restoreXml. 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 | 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 | contain (AddrSpace *id2) const |
Determine if this space contains another. 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 | isOverlay (void) const |
Return true if this is an overlay space. | |
bool | isOverlayBase (void) const |
Return true if other spaces overlay this space. | |
bool | isTruncated (void) const |
Return true if this space is truncated from its original size. More... | |
uintm | data2Uintm (const uint1 *ptr, int4 size) const |
Convert a sequence of bytes into an integer value. More... | |
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 void | saveXmlAttributes (ostream &s, uintb offset) const |
Save an address as XML. More... | |
virtual void | saveXmlAttributes (ostream &s, uintb offset, int4 size) const |
Save an address and size as XML. More... | |
virtual uintb | restoreXmlAttributes (const Element *el, uint4 &size) const |
Recover an offset and size. More... | |
virtual void | printRaw (ostream &s, uintb offset) const |
Write an address in this space to a stream. More... | |
virtual uintb | read (const string &s, int4 &size) const |
Read in an address (and possible size) from a string. More... | |
Private Attributes | |
AddrSpace * | baseSpace |
Space being overlayed. | |
Additional Inherited Members | |
Public Types inherited from AddrSpace | |
enum | { big_endian = 1, heritaged = 2, does_deadcode = 4, programspecific = 8, reverse_justification = 16, overlay = 32, overlaybase = 64, truncated = 128, hasphysical = 256 } |
Static Public Member Functions inherited from 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 int4 | addressToByteInt (int4 val, uint4 ws) |
Scale int4 from addressable units to byte units. More... | |
static int4 | byteToAddressInt (int4 val, uint4 ws) |
Scale int4 from byte units to addressable units. More... | |
Protected Member Functions inherited from AddrSpace | |
void | calcScaleMask (void) |
Calculate scale and mask. More... | |
void | assignShortcut (void) |
Assign a shortcut character to the space. 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 | truncateSpace (uint4 newsize) |
Protected Attributes inherited from 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 | 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. | |
An overlay space.
A different code and data layout that occupies the same memory as another address space. Some compilers use this concept to increase the logical size of a program without increasing its physical memory requirements. An overlay space allows the same physical location to contain different code and be labeled with different symbols, depending on context. From the point of view of reverse engineering, the different code and symbols are viewed as a logically distinct space.
OverlaySpace::OverlaySpace | ( | AddrSpaceManager * | m, |
const Translate * | t | ||
) |
Constructor.
m | is the address space manager |
t | is the processor translator |
References baseSpace, AddrSpace::overlay, and AddrSpace::setFlags().
AddrSpace * OverlaySpace::getBaseSpace | ( | void | ) | const |
Get the address space being overlayed.
References baseSpace.
Referenced by AddrSpaceManager::insertSpace(), and Architecture::parseGlobal().
|
virtual |
Recover the details of this space from XML.
Walk a parsed XML tag and recover all the properties defining this space. The processor translator, trans, and the type must already be filled in.
el | is the parsed XML tag |
Reimplemented from AddrSpace.
References AddrSpace::addressSize, AddrSpace::assignShortcut(), baseSpace, AddrSpace::big_endian, AddrSpace::calcScaleMask(), AddrSpace::deadcodedelay, AddrSpace::delay, AddrSpace::getAddrSize(), AddrSpace::getDeadcodeDelay(), AddrSpace::getDelay(), AddrSpace::getManager(), AddrSpaceManager::getSpaceByName(), AddrSpace::getWordSize(), AddrSpace::hasphysical, AddrSpace::hasPhysical(), AddrSpace::index, AddrSpace::isBigEndian(), AddrSpace::name, AddrSpace::setFlags(), and AddrSpace::wordsize.
|
virtual |
Write the details of this space as XML.
Write a tag fully describing the details of this space suitable for later recovery via restoreXml.
s | is the stream being written |
Reimplemented from AddrSpace.
References baseSpace, AddrSpace::getName(), AddrSpace::index, and AddrSpace::name.