#define OPSZ_bound OPSZ_8_short4 |
Operand size for bound memory reference.
#define OPSZ_call OPSZ_ret |
Operand size for push portion of call.
#define OPSZ_clflush OPSZ_1 |
Operand size for clflush memory reference.
#define OPSZ_fldenv OPSZ_28_short14 |
Operand size for fldenv memory reference.
#define OPSZ_fnsave OPSZ_108_short94 |
Operand size for fnsave memory reference.
#define OPSZ_fnstenv OPSZ_28_short14 |
Operand size for fnstenv memory reference.
#define OPSZ_frstor OPSZ_108_short94 |
Operand size for frstor memory reference.
#define OPSZ_fxrstor OPSZ_512 |
Operand size for fxrstor memory reference.
#define OPSZ_fxsave OPSZ_512 |
Operand size for fxsave memory reference.
#define OPSZ_invlpg OPSZ_0 |
Operand size for invlpg memory reference.
#define OPSZ_lea OPSZ_0 |
Operand size for lea memory reference.
#define OPSZ_lgdt OPSZ_6x10 |
Operand size for lgdt memory reference.
#define OPSZ_lidt OPSZ_6x10 |
Operand size for lidt memory reference.
#define OPSZ_maskmovdqu OPSZ_16 |
Operand size for maskmovdqu memory reference.
#define OPSZ_maskmovq OPSZ_8 |
Operand size for maskmovq memory reference.
#define OPSZ_prefetch OPSZ_1 |
Operand size for prefetch memory references.
#define OPSZ_PTR OPSZ_8 |
Operand size for pointer values.
#define OPSZ_ret OPSZ_4x8_short2xi8 |
Operand size for ret instruction.
#define OPSZ_sgdt OPSZ_6x10 |
Operand size for sgdt memory reference.
#define OPSZ_sidt OPSZ_6x10 |
Operand size for sidt memory reference.
#define OPSZ_STACK OPSZ_8 |
Operand size for stack push/pop operand sizes.
#define OPSZ_VARSTACK OPSZ_4x8_short2 |
Operand size for prefix-varying stack push/pop operand sizes.
#define OPSZ_xlat OPSZ_1 |
Operand size for xlat memory reference.
#define REG_LAST_ENUM REG_INVALID |
Last register enum value.
#define REG_LAST_VALID_ENUM REG_CR15 |
Last valid register enum value.
#define REG_START_16 REG_AX |
Start of 16-bit general register enum values.
#define REG_START_32 REG_EAX |
Start of 32-bit general register enum values.
#define REG_START_64 REG_RAX |
Start of 64-bit general register enum values.
#define REG_START_8 REG_AL |
Start of 8-bit general register enum values.
#define REG_START_8HL REG_AL |
Start of 8-bit high-low register enum values.
#define REG_START_CR REG_CR0 |
Start of control register enum values.
#define REG_START_DR REG_DR0 |
Start of debug register enum values.
#define REG_START_FLOAT REG_ST0 |
Start of floating-point-register enum values.
#define REG_START_MMX REG_MM0 |
Start of mmx register enum values.
#define REG_START_SEGMENT SEG_ES |
Start of segment register enum values.
#define REG_START_x64_8 REG_SPL |
Start of 8-bit x64-only register enum values.
#define REG_START_x86_8 REG_AH |
Start of 8-bit x86-only register enum values.
#define REG_START_XMM REG_XMM0 |
Start of xmm register enum values.
#define REG_STOP_16 REG_R15W |
End of 16-bit general register enum values.
#define REG_STOP_32 REG_R15D |
End of 32-bit general register enum values.
#define REG_STOP_64 REG_R15 |
End of 64-bit general register enum values.
#define REG_STOP_8 REG_DIL |
End of 8-bit general register enum values.
#define REG_STOP_8HL REG_BH |
End of 8-bit high-low register enum values.
#define REG_STOP_CR REG_CR15 |
End of control register enum values.
#define REG_STOP_DR REG_DR15 |
End of debug register enum values.
#define REG_STOP_FLOAT REG_ST7 |
End of floating-point-register enum values.
#define REG_STOP_MMX REG_MM7 |
End of mmx register enum values.
#define REG_STOP_SEGMENT SEG_GS |
End of segment register enum values.
#define REG_STOP_x64_8 REG_DIL |
Stop of 8-bit x64-only register enum values.
#define REG_STOP_x86_8 REG_BH |
Stop of 8-bit x86-only register enum values.
#define REG_STOP_XMM REG_XMM15 |
End of xmm register enum values.
#define REG_XAX REG_RAX |
Platform-independent way to refer to rax/eax.
#define REG_XBP REG_RBP |
Platform-independent way to refer to rbp/ebp.
#define REG_XBX REG_RBX |
Platform-independent way to refer to rbx/ebx.
#define REG_XCX REG_RCX |
Platform-independent way to refer to rcx/ecx.
#define REG_XDI REG_RDI |
Platform-independent way to refer to rdi/edi.
#define REG_XDX REG_RDX |
Platform-independent way to refer to rdx/edx.
#define REG_XSI REG_RSI |
Platform-independent way to refer to rsi/esi.
#define REG_XSP REG_RSP |
Platform-independent way to refer to rsp/esp.
anonymous enum |
anonymous enum |
const char* get_register_name | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ 32-bit register constant. Returns the string name for reg
.
app_pc opnd_compute_address | ( | opnd_t | opnd, | |
dr_mcontext_t * | mc | |||
) |
Returns the effective address of opnd
, computed using the passed-in register values. If opnd
is a far address, ignores that aspect except for TLS references on Windows (fs: for 32-bit, gs: for 64-bit) or typical fs: or gs: references on Linux. For far addresses the calling thread's segment selector is used.
opnd_t opnd_create_abs_addr | ( | void * | addr, | |
opnd_size_t | data_size | |||
) |
Returns a memory reference operand that refers to the address addr
. The operand has data size data_size
(must be a OPSZ_ constant).
If addr
<= 2^32 (which is always true in 32-bit mode), this routine is equivalent to opnd_create_base_disp(REG_NULL, REG_NULL, 0, (int)addr, data_size).
Otherwise, this routine creates a separate operand type with an absolute 64-bit memory address. Note that such an operand can only be used as a load or store from or to the rax register.
opnd_t opnd_create_base_disp | ( | reg_id_t | base_reg, | |
reg_id_t | index_reg, | |||
int | scale, | |||
int | disp, | |||
opnd_size_t | data_size | |||
) |
Returns a memory reference operand that refers to the address:
or, in other words,
The operand has data size data_size (must be a OPSZ_ constant). Both base_reg
and index_reg
must be REG_ constants. scale
must be either 1, 2, 4, or 8.
opnd_t opnd_create_base_disp_ex | ( | reg_id_t | base_reg, | |
reg_id_t | index_reg, | |||
int | scale, | |||
int | disp, | |||
opnd_size_t | size, | |||
bool | encode_zero_disp, | |||
bool | force_full_disp, | |||
bool | disp_short_addr | |||
) |
Returns a memory reference operand that refers to the address:
or, in other words,
The operand has data size data_size
(must be a OPSZ_ constant). Both base_reg
and index_reg
must be REG_ constants. scale
must be either 1, 2, 4, or 8. Gives control over encoding optimizations:
encode_zero_disp
, a zero value for disp will not be omitted;force_full_disp
, a small value for disp will not occupy only one byte.disp_short_addr
, short (16-bit for 32-bit mode, 32-bit for 64-bit mode) addressing will be used (note that this normally only needs to be specified for an absolute address; otherwise, simply use the desired short registers for base and/or index).(Both of those are false when using opnd_create_base_disp()).
opnd_t opnd_create_far_abs_addr | ( | reg_id_t | seg, | |
void * | addr, | |||
opnd_size_t | data_size | |||
) |
Returns a memory reference operand that refers to the address seg:
addr
. The operand has data size data_size
(must be a OPSZ_ constant).
If addr
<= 2^32 (which is always true in 32-bit mode), this routine is equivalent to opnd_create_far_base_disp(seg, REG_NULL, REG_NULL, 0, (int)addr, data_size).
Otherwise, this routine creates a separate operand type with an absolute 64-bit memory address. Note that such an operand can only be used as a load or store from or to the rax register.
opnd_t opnd_create_far_base_disp | ( | reg_id_t | seg, | |
reg_id_t | base_reg, | |||
reg_id_t | index_reg, | |||
int | scale, | |||
int | disp, | |||
opnd_size_t | data_size | |||
) |
Returns a far memory reference operand that refers to the address:
or, in other words,
The operand has data size data_size
(must be a OPSZ_ constant). seg
must be a SEG_ constant. Both base_reg
and index_reg
must be REG_ constants. scale
must be either 1, 2, 4, or 8.
opnd_t opnd_create_far_base_disp_ex | ( | reg_id_t | seg, | |
reg_id_t | base_reg, | |||
reg_id_t | index_reg, | |||
int | scale, | |||
int | disp, | |||
opnd_size_t | size, | |||
bool | encode_zero_disp, | |||
bool | force_full_disp, | |||
bool | disp_short_addr | |||
) |
Returns a far memory reference operand that refers to the address:
or, in other words,
The operand has data size data_size
(must be a OPSZ_ constant). seg
must be a SEG_ constant. Both base_reg
and index_reg
must be REG_ constants. scale must be either 1, 2, 4, or 8. Gives control over encoding optimizations:
encode_zero_disp
, a zero value for disp will not be omitted;force_full_disp
, a small value for disp will not occupy only one byte.disp_short_addr
, short (16-bit for 32-bit mode, 32-bit for 64-bit mode) addressing will be used (note that this normally only needs to be specified for an absolute address; otherwise, simply use the desired short registers for base and/or index).(Both of those are false when using opnd_create_far_base_disp()).
Returns a far instr_t pointer address with value seg_selector:instr
. seg_selector
is a segment selector, not a SEG_ constant.
opnd_t opnd_create_far_pc | ( | ushort | seg_selector, | |
app_pc | pc | |||
) |
Returns a far program address operand with value seg_selector:pc
. seg_selector
is a segment selector, not a SEG_ constant.
opnd_t opnd_create_far_rel_addr | ( | reg_id_t | seg, | |
void * | addr, | |||
opnd_size_t | data_size | |||
) |
Returns a memory reference operand that refers to the address seg
: addr
, but will be encoded as a pc-relative address. It is up to the caller to ensure that the resulting address is reachable via a 32-bit signed displacement from the next instruction at emit time.
DR guarantees that all of its code caches and heap are within the same 2GB memory region. DR also loads client libraries within 32-bit reachability of its code caches and heap. This means that any static data or code in a client library, or any data allocated using DR's API, is guaranteed to be reachable from code cache code.
The operand has data size data_size
(must be a OPSZ_ constant).
To represent a 32-bit address (i.e., what an address size prefix indicates), simply zero out the top 32 bits of the address before passing it to this routine.
opnd_t opnd_create_immed_float | ( | float | f | ) |
Returns an immediate float operand with value f
.
opnd_t opnd_create_immed_int | ( | ptr_int_t | i, | |
opnd_size_t | data_size | |||
) |
Returns an immediate integer operand with value i
and size data_size
; data_size
must be a OPSZ_ constant.
opnd_t opnd_create_null | ( | void | ) |
Returns an empty operand.
opnd_t opnd_create_pc | ( | app_pc | pc | ) |
Returns a program address operand with value pc
.
opnd_t opnd_create_reg | ( | reg_id_t | r | ) |
Returns a register operand (r
must be a REG_ constant).
opnd_t opnd_create_rel_addr | ( | void * | addr, | |
opnd_size_t | data_size | |||
) |
Returns a memory reference operand that refers to the address addr
, but will be encoded as a pc-relative address. At emit time, if addr
is out of reach of a 32-bit signed displacement from the next instruction, encoding will fail.
DR guarantees that all of its code caches and heap are within the same 2GB memory region. DR also loads client libraries within 32-bit reachability of its code caches and heap. This means that any static data or code in a client library, or any data allocated using DR's API, is guaranteed to be reachable from code cache code.
The operand has data size data_size (must be a OPSZ_ constant).
To represent a 32-bit address (i.e., what an address size prefix indicates), simply zero out the top 32 bits of the address before passing it to this routine.
Returns true iff def
, considered as a write, affects use
. Is conservative, so if both def
and use
are memory references, will return true unless it can disambiguate them based on their registers and displacement.
void opnd_disassemble | ( | void * | drcontext, | |
opnd_t | opnd, | |||
file_t | outfile | |||
) |
Prints the operand opnd
to file outfile
. The default is to use AT&T-style syntax, unless the -syntax_intel runtime option is specified.
void* opnd_get_addr | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) absolute or pc-relative memory reference, or a base+disp memory reference with no base or index register. Returns opnd's
absolute address (which will be pc-relativized on encoding for pc-relative memory references).
reg_id_t opnd_get_base | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference. Returns the base register (a REG_ constant).
int opnd_get_disp | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference. Returns the displacement.
float opnd_get_immed_float | ( | opnd_t | opnd | ) |
Assumes opnd
is an immediate float, returns its value.
reg_id_t opnd_get_index | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference. Returns the index register (a REG_ constant).
app_pc opnd_get_pc | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) program address, returns its value.
reg_id_t opnd_get_reg | ( | opnd_t | opnd | ) |
Assumes opnd
is a register operand. Returns the register it refers to (a REG_ constant).
reg_id_t opnd_get_reg_used | ( | opnd_t | opnd, | |
int | index | |||
) |
Used in conjunction with opnd_num_regs_used(), this routine can be used to iterate through all registers used by opnd
. The index values begin with 0 and proceed through opnd_num_regs_used(opnd)-1.
int opnd_get_scale | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference. Returns the scale.
reg_id_t opnd_get_segment | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) memory reference of any type. Returns opnd's
segment (a SEG_ constant), or REG_NULL if it is a near memory reference.
ushort opnd_get_segment_selector | ( | opnd_t | opnd | ) |
Assumes opnd
is a far program address. Returns opnd's
segment, a segment selector (not a SEG_ constant).
opnd_size_t opnd_get_size | ( | opnd_t | opnd | ) |
Return the data size of opnd
as a OPSZ_ constant. Assumes opnd
is a register, immediate integer, or memory reference. If opnd
is a register returns the result of opnd_reg_get_size() called on the REG_ constant. Returns OPSZ_NA if opnd
does not have a valid size.
bool opnd_is_abs_addr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a (near or far) absolute address operand. Returns true for both base-disp operands with no base or index and 64-bit non-base-disp absolute address operands.
bool opnd_is_base_disp | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a (near or far) base+disp memory reference operand.
bool opnd_is_disp_encode_zero | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference; returns whether encode_zero_disp has been specified for opnd
.
bool opnd_is_disp_force_full | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference; returns whether force_full_disp has been specified for opnd
.
bool opnd_is_disp_short_addr | ( | opnd_t | opnd | ) |
Assumes opnd
is a (near or far) base+disp memory reference; returns whether disp_short_addr has been specified for opnd
.
bool opnd_is_far_abs_addr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a far absolute address operand. Returns true for both base-disp operands with no base or index and 64-bit non-base-disp absolute address operands.
bool opnd_is_far_base_disp | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a far base+disp memory reference operand.
bool opnd_is_far_instr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a far instr_t pointer address operand.
bool opnd_is_far_memory_reference | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a far memory reference operand of any type: base-disp, absolute address, or pc-relative address.
bool opnd_is_far_pc | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a far program address operand.
bool opnd_is_far_rel_addr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a far pc-relative memory reference operand.
bool opnd_is_immed | ( | opnd_t | opnd | ) |
Returns true iff opnd
is an immediate (integer or float) operand.
bool opnd_is_immed_float | ( | opnd_t | opnd | ) |
Returns true iff opnd
is an immediate float operand.
bool opnd_is_immed_int | ( | opnd_t | opnd | ) |
Returns true iff opnd
is an immediate integer operand.
bool opnd_is_instr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a (near or far) instr_t pointer address operand.
bool opnd_is_memory_reference | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a (near or far) memory reference operand of any type: base-disp, absolute address, or pc-relative address.
bool opnd_is_near_abs_addr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a near (i.e., default segment) absolute address operand. Returns true for both base-disp operands with no base or index and 64-bit non-base-disp absolute address operands.
bool opnd_is_near_base_disp | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a near (i.e., default segment) base+disp memory reference operand.
bool opnd_is_near_instr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a near instr_t pointer address operand.
bool opnd_is_near_memory_reference | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a near memory reference operand of any type: base-disp, absolute address, or pc-relative address.
bool opnd_is_near_pc | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a near (i.e., default segment) program address operand.
bool opnd_is_near_rel_addr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a near (i.e., default segment) pc-relative memory reference operand.
bool opnd_is_null | ( | opnd_t | opnd | ) |
Returns true iff opnd
is an empty operand.
bool opnd_is_pc | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a (near or far) program address operand.
bool opnd_is_reg | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a register operand.
bool opnd_is_reg_32bit | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a register operand that refers to a 32-bit general-purpose register.
bool opnd_is_reg_64bit | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a register operand that refers to a 64-bit general-purpose register.
bool opnd_is_reg_pointer_sized | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a register operand that refers to a pointer-sized general-purpose register.
bool opnd_is_rel_addr | ( | opnd_t | opnd | ) |
Returns true iff opnd
is a (near or far) pc-relative memory reference operand.
int opnd_num_regs_used | ( | opnd_t | opnd | ) |
Returns the number of registers referred to by opnd
. This will only be non-zero for register operands and memory references.
bool opnd_replace_reg | ( | opnd_t * | opnd, | |
reg_id_t | old_reg, | |||
reg_id_t | new_reg | |||
) |
Assumes that both old_reg
and new_reg
are REG_ constants. Replaces all occurrences of old_reg
in *opnd
with new_reg
.
Returns true iff op1
and op2
are indistinguishable. If either uses variable operand sizes, the default size is assumed.
Returns true iff op1
and op2
are both memory references and they are indistinguishable, ignoring data size.
void opnd_set_disp | ( | opnd_t * | opnd, | |
int | disp | |||
) |
Set the displacement of a memory reference operand opnd
to disp
.
void opnd_set_disp_ex | ( | opnd_t * | opnd, | |
int | disp, | |||
bool | encode_zero_disp, | |||
bool | force_full_disp, | |||
bool | disp_short_addr | |||
) |
Set the displacement and encoding controls of a memory reference operand:
encode_zero_disp
, a zero value for disp
will not be omitted;force_full_disp
, a small value for disp
will not occupy only one byte.disp_short_addr
, short (16-bit for 32-bit mode, 32-bit for 64-bit mode) addressing will be used (note that this normally only needs to be specified for an absolute address; otherwise, simply use the desired short registers for base and/or index). void opnd_set_size | ( | opnd_t * | opnd, | |
opnd_size_t | newsize | |||
) |
Sets the data size of opnd
. Assumes opnd
is an immediate integer or a memory reference.
Returns true iff there exists some register that is referred to (directly or overlapping) by both op1
and op2
.
Shrinks all 32-bit registers in opnd
to their 16-bit versions. Also shrinks the size of immediate integers and memory references from OPSZ_4 to OPSZ_2.
Shrinks all 64-bit registers in opnd
to their 32-bit versions. Also shrinks the size of immediate integers and memory references from OPSZ_8 to OPSZ_4.
uint opnd_size_in_bytes | ( | opnd_size_t | size | ) |
Assumes size
is a OPSZ_ or a REG_ constant. If size
is a REG_ constant, first calls reg_get_size(size
) to get a OPSZ_ constant. Returns the number of bytes the OPSZ_ constant represents.
bool opnd_uses_reg | ( | opnd_t | opnd, | |
reg_id_t | reg | |||
) |
Assumes that reg
is a REG_ constant. Returns true iff opnd
refers to reg directly or refers to a register that overlaps reg
(e.g., REG_AX overlaps REG_EAX).
reg_id_t reg_32_to_16 | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ 32-bit register constant. Returns the 16-bit version of reg
.
reg_id_t reg_32_to_64 | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ 32-bit register constant. Returns the 64-bit version of reg
.
reg_id_t reg_32_to_8 | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ 32-bit register constant. Returns the 8-bit version of reg
(the least significant byte: REG_AL instead of REG_AH if passed REG_EAX, e.g.). For 32-bit DR builds, returns REG_NULL if passed REG_ESP, REG_EBP, REG_ESI, or REG_EDI.
reg_id_t reg_32_to_opsz | ( | reg_id_t | reg, | |
opnd_size_t | sz | |||
) |
Assumes that reg
is a REG_ 32-bit register constant. If sz
== OPSZ_2, returns the 16-bit version of reg
. For 64-bit versions of this library, if sz
== OPSZ_8, returns the 64-bit version of reg
.
reg_id_t reg_64_to_32 | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ 64-bit register constant. Returns the 32-bit version of reg
.
byte reg_get_bits | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns reg's
representation as 3 bits in a modrm byte (the 3 bits are the lower-order bits in the return value).
opnd_size_t reg_get_size | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns the OPSZ_ constant corresponding to the register size. Returns OPSZ_NA if reg is not a REG_ constant.
reg_t reg_get_value | ( | reg_id_t | reg, | |
dr_mcontext_t * | mc | |||
) |
Returns the value of the register reg
, selected from the passed-in register values.
bool reg_is_32bit | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to a 32-bit general-purpose register.
bool reg_is_64bit | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to a 64-bit general-purpose register.
bool reg_is_extended | ( | reg_id_t | reg | ) |
Returns true iff reg
refers to an extended register only available in 64-bit mode and not in 32-bit mode (e.g., R8-R15, XMM8-XMM15, etc.)
bool reg_is_fp | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to a floating-point register.
bool reg_is_gpr | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to a General Purpose Register, i.e., rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, or a subset.
bool reg_is_mmx | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to an mmx (64-bit) register.
bool reg_is_pointer_sized | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to a pointer-sized general-purpose register.
bool reg_is_segment | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to a segment (i.e., it's really a SEG_ constant).
bool reg_is_xmm | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ constant. Returns true iff it refers to an xmm (128-bit SSE/SSE2) register.
bool reg_overlap | ( | reg_id_t | r1, | |
reg_id_t | r2 | |||
) |
Assumes that r1
and r2
are both REG_ constants. Returns true iff r1's
register overlaps r2's
register (e.g., if r1
== REG_AX and r2
== REG_EAX).
int reg_parameter_num | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ register constant. If reg is used as part of the calling convention, returns which parameter ordinal it matches (0-based); otherwise, returns -1.
void reg_set_value | ( | reg_id_t | reg, | |
dr_mcontext_t * | mc, | |||
reg_t | value | |||
) |
Sets the register reg
in the passed in mcontext mc
to value
.
reg_id_t reg_to_pointer_sized | ( | reg_id_t | reg | ) |
Assumes that reg
is a REG_ 32-bit register constant. Returns the pointer-sized version of reg
.