Models an architecture register that can serve as key to designate that register.

Also provides useful information about the register, such as its size, category or parent register

A Register instance is not meant to be constructed directly. Use registers defined in the reven2.arch modules instead.

Examples

Registers are predefined inside of the arch submodules arch.x64, arch.x87, arch.msr and arch.sse2.

>>> arch.x64.rax
Register(x64.rax)

The main use of registers is to pass them as keys to various methods:

>>> context.read(arch.x64.rax) # reads rax in the current context
42

You can also get some information about the registers:

>>> arch.x64.rax.category
Category(general_purpose)
>>> arch.x64.rax.size_bytes
8
Method __init__ Initializes a Register from a low-level object. Not meant to be called directly.
Method name Property: The name of this register as a string.
Method parent The parent register of this register, if exists. Otherwise, None
Method size_bits Property: The exact size of the register, in bits
Method size_bytes Property: The smallest number of bytes required to contain the register
Method bit_offset Property: The offset in bits from the parent register.
Method root_bit_offset Property: The offset in bits from the root register.
Method category Property: The category of the register.
Method arch Property: The architecture of the register, as a string.
Static Method from_name Get the register from its name or None if reg_name doesn't represent a valid register.
Method __repr__ Undocumented
Method __eq__ Undocumented
Method __ne__ Undocumented
def __init__(self, _rvn_reg, arch):

Initializes a Register from a low-level object. Not meant to be called directly.

Use registers defined in the reven2.arch modules instead.

Information

Parameters_rvn_reglow-level representation of a register
archstring representing the architecture of that register
@property
def name(self):

Property: The name of this register as a string.

Examples

>>> arch.x64.rax.name
'rax'
>>> arch.x87.fp0.name
'fp0'

Information

ReturnsA string.
def parent(self):

The parent register of this register, if exists. Otherwise, None

Examples

>>> arch.x64.ah.parent()
Register(x64.eax)
>>> arch.x64.ah.parent().parent()
Register(x64.rax)
>>> arch.x64.ah.parent().parent().parent()
None

Information

ReturnsA Register.
@property
def size_bits(self):

Property: The exact size of the register, in bits

Examples

>>> arch.sse2.zmm0.size_bits
512
>>> arch.x64.rax.size_bits
64
>>> arch.x64.iopl.size_bits
2
>>> arch.x64.cf.size_bits
1

Information

ReturnsAn integer.
@property
def size_bytes(self):

Property: The smallest number of bytes required to contain the register

Examples

>>> arch.sse2.zmm0.size_bytes
64
>>> arch.x64.rax.size_bytes
8
>>> arch.x64.iopl.size_bytes
1
>>> arch.x64.cf.size_bytes
1

Information

ReturnsAn integer.
@property
def bit_offset(self):

Property: The offset in bits from the parent register.

If there is no parent register (e.g., rax), returns 0.

Examples

>>> arch.x64.iopl.bit_offset
12
>>> arch.x64.pf.bit_offset
2
>>> arch.x64.rax.bit_offset
0
>>> arch.x87.top.bit_offset
11
>>> arch.msr.aperf.bit_offset
0

Information

ReturnsAn integer.
@property
def root_bit_offset(self):

Property: The offset in bits from the root register.

If the current register is the root register (e.g. rax), returns 0.

Note: Most of the time, this returns the same as Register.bit_offset.

Examples

>>> arch.x64.iopl.root_bit_offset
12
>>> arch.x64.pf.root_bit_offset
2
>>> arch.x64.rax.root_bit_offset
0
>>> arch.x87.top.root_bit_offset
11
>>> arch.msr.aperf.root_bit_offset
0

Information

ReturnsAn integer.
@property
def category(self):

Property: The category of the register.

Examples

>>> arch.x64.iopl.category
Category(flags)
>>> arch.x64.rflags.category
Category(condensed_flags)
>>> arch.x64.rax.category
Category(general_purpose)
>>> arch.x64.rip.category
Category(pc)

Information

ReturnsA Category instance.
@property
def arch(self):

Property: The architecture of the register, as a string.

The architecture is always the same as the module name in which the register resides.

Note: "architectures" are currently defined somewhat arbitrarily:

  • x64: GPR + flags + rip registers
  • sse2: SIMD registers
  • x87: floating point registers
  • msr: msr registers

Examples

>>> arch.x64.iopl.arch
'x64'
>>> arch.sse2.xmm0.arch
'sse2'
>>> arch.x87.fp0.arch
'x87'
>>> arch.msr.aperf.arch
'msr'

Information

ReturnsA string.
@staticmethod
def from_name(reg_name):

Get the register from its name or None if reg_name doesn't represent a valid register.

Information

Parametersreg_namethe name of register.
ReturnsA Register such that its name is equal to reg_name.
def __repr__(self):
Undocumented
def __eq__(self, r):
Undocumented
def __ne__(self, r):
Undocumented
API Documentation for reven2, generated by pydoctor at 2019-09-11 11:57:21.