retdec
Public Types | Public Member Functions | Protected Attributes | Static Protected Attributes | List of all members
retdec::common::Storage Class Reference

#include <storage.h>

Collaboration diagram for retdec::common::Storage:
Collaboration graph
[legend]

Public Types

enum class  eType { UNDEFINED = 0 , GLOBAL , REGISTER , STACK }
 

Public Member Functions

 Storage ()
 
Storage query methods.
bool isDefined () const
 
bool isUndefined () const
 
bool isMemory () const
 
bool isMemory (retdec::common::Address &globalAddress) const
 
bool isRegister () const
 
bool isRegister (std::string &registerName) const
 
bool isRegister (int &registerNumber) const
 
bool isStack () const
 
bool isStack (int &stackOffset) const
 
Storage get methods.
retdec::common::Address getAddress () const
 
std::string getRegisterName () const
 
int getStackOffset () const
 
std::optional< unsigned > getRegisterNumber () const
 
Storage set methods.
void setRegisterNumber (unsigned registerNumber)
 

Static Public Member Functions

Storage named constructors.
static Storage undefined ()
 
static Storage onStack (int offset)
 
static Storage onStack (int offset, unsigned registerNumber)
 
static Storage inMemory (const retdec::common::Address &address)
 
static Storage inRegister (const std::string &registerName)
 
static Storage inRegister (unsigned registerNumber)
 
static Storage inRegister (const std::string &registerName, unsigned registerNumber)
 

Protected Attributes

eType type = eType::UNDEFINED
 
int _stackOffset = 0
 
std::string _registerName
 
retdec::common::Address _globalAddress
 
std::optional< unsigned > _registerNumber
 

Static Protected Attributes

static const int UNDEF_REG_NUM = -1
 

Detailed Description

Represents possible storages of objects, function returns, etc.

Member Enumeration Documentation

◆ eType

Enumerator
UNDEFINED 
GLOBAL 
REGISTER 
STACK 

Constructor & Destructor Documentation

◆ Storage()

retdec::common::Storage::Storage ( )

Member Function Documentation

◆ getAddress()

retdec::common::Address retdec::common::Storage::getAddress ( ) const
Returns
If storage is global return its address. Otherwise return an undefined value.

◆ getRegisterName()

std::string retdec::common::Storage::getRegisterName ( ) const
Returns
If storage is register return its name. Otherwise return an undefined value.

◆ getRegisterNumber()

std::optional< unsigned > retdec::common::Storage::getRegisterNumber ( ) const

This method can be used on any storage type, which might contain register number. Right now, it is either register or stack storage.

Returns
If register number is set, return defined value. Otherwise return undefined value.

◆ getStackOffset()

int retdec::common::Storage::getStackOffset ( ) const
Returns
If storage is stack return its offset. Otherwise return an undefined value.

◆ inMemory()

Storage retdec::common::Storage::inMemory ( const retdec::common::Address address)
static

◆ inRegister() [1/3]

Storage retdec::common::Storage::inRegister ( const std::string &  registerName)
static

There are two possible register flavours: named and numbered registers. This creates register storage using register name.

◆ inRegister() [2/3]

Storage retdec::common::Storage::inRegister ( const std::string &  registerName,
unsigned  registerNumber 
)
static

There are two possible register flavours: named and numbered registers. This creates register storage using register name, which also contains information about register's number and class.

◆ inRegister() [3/3]

Storage retdec::common::Storage::inRegister ( unsigned  registerNumber)
static

There are two possible register flavours: named and numbered registers. This creates register storage using register number.

◆ isDefined()

bool retdec::common::Storage::isDefined ( ) const

◆ isMemory() [1/2]

bool retdec::common::Storage::isMemory ( ) const

◆ isMemory() [2/2]

bool retdec::common::Storage::isMemory ( retdec::common::Address globalAddress) const
Parameters
[out]globalAddressIf storage is global this is set to its address. Otherwise it is set to an undefined value.

◆ isRegister() [1/3]

bool retdec::common::Storage::isRegister ( ) const

◆ isRegister() [2/3]

bool retdec::common::Storage::isRegister ( int &  registerNumber) const
Parameters
[out]registerNumberIf register number is set, return it in parameter. Otherwise parameter is left unchanged.
Returns
If register number is set, return true. Otherwise return false.

◆ isRegister() [3/3]

bool retdec::common::Storage::isRegister ( std::string &  registerName) const
Parameters
[out]registerNameIf storage is register this is set to its name. Otherwise it is set to an undefined value. If register number was set, but name was not, this may be empty even if storage is a register.

◆ isStack() [1/2]

bool retdec::common::Storage::isStack ( ) const

◆ isStack() [2/2]

bool retdec::common::Storage::isStack ( int &  stackOffset) const
Parameters
[out]stackOffsetIf storage is starck this is set to its offset. Otherwise it is set to an undefined value.

◆ isUndefined()

bool retdec::common::Storage::isUndefined ( ) const

◆ onStack() [1/2]

Storage retdec::common::Storage::onStack ( int  offset)
static

◆ onStack() [2/2]

Storage retdec::common::Storage::onStack ( int  offset,
unsigned  registerNumber 
)
static

Create on stack storage associtated with the provided register number.

◆ setRegisterNumber()

void retdec::common::Storage::setRegisterNumber ( unsigned  registerNumber)

◆ undefined()

Storage retdec::common::Storage::undefined ( )
static

Member Data Documentation

◆ _globalAddress

retdec::common::Address retdec::common::Storage::_globalAddress
protected

◆ _registerName

std::string retdec::common::Storage::_registerName
protected

◆ _registerNumber

std::optional<unsigned> retdec::common::Storage::_registerNumber
protected

◆ _stackOffset

int retdec::common::Storage::_stackOffset = 0
protected

◆ type

eType retdec::common::Storage::type = eType::UNDEFINED
protected

◆ UNDEF_REG_NUM

const int retdec::common::Storage::UNDEF_REG_NUM = -1
staticprotected

The documentation for this class was generated from the following files: