Functions that deal with offsets.
"Being an offset" is a characteristic of an operand. This means that operand or
its part represent offset from some address in the program. This linear address
is called "offset base". Some operands may have 2 offsets simultaneously.
Generally, IDA doesn't handle this except for Motorola outer offsets. Thus there
may be two offset values in an operand: simple offset and outer offset.
Outer offsets are handled by specifying special operand number: it should be
ORed with OPND_OUTER value.
See bytes.hpp for further explanation of operand numbers.
|
"reftype_t" | get_default_reftype (*args) |
| get_default_reftype(ea) -> reftype_t Get default reference type depending on the segment.
|
|
"bool" | op_offset_ex (*args) |
| op_offset_ex(ea, n, ri) -> bool Convert operand to a reference.
|
|
"bool" | op_offset (*args) |
| op_offset(ea, n, type_and_flags, target=BADADDR, base=0, tdelta=0) -> bool See op_offset_ex()
|
|
"bool" | op_plain_offset (*args) |
| op_plain_offset(ea, n, base) -> bool Convert operand to a reference with the default reference type.
|
|
"ea_t" | get_offbase (*args) |
| get_offbase(ea, n) -> ea_t Get offset base value
|
|
"qstring *" | get_offset_expression (*args) |
| get_offset_expression(ea, n, _from, offset, getn_flags=0) -> str Get offset expression (in the form "offset name+displ").
|
|
"qstring *" | get_offset_expr (*args) |
| get_offset_expr(ea, n, ri, _from, offset, getn_flags=0) -> str See get_offset_expression()
|
|
"ea_t" | can_be_off32 (*args) |
| can_be_off32(ea) -> ea_t Does the specified address contain a valid OFF32 value?.
|
|
"ea_t" | calc_offset_base (*args) |
| calc_offset_base(ea, n) -> ea_t Try to calculate the offset base This function takes into account the fixup information, current ds and cs values.
|
|
"ea_t" | calc_probable_base_by_value (*args) |
| calc_probable_base_by_value(ea, off) -> ea_t Try to calculate the offset base.
|
|
"bool" | calc_reference_data (*args) |
| calc_reference_data(target, base, _from, ri, opval) -> bool Calculate the target and base addresses of an offset expression.
|
|
"ea_t" | add_refinfo_dref (*args) |
| add_refinfo_dref(insn, _from, ri, opval, type, opoff) -> ea_t Add xrefs for a reference from the given instruction ( insn_t::ea).
|
|
"ea_t" | calc_target (*args) |
| calc_target(_from, opval, ri) -> ea_t Retrieve refinfo_t structure and calculate the target.
|
|
"ea_t" | calc_basevalue (*args) |
| calc_basevalue(target, base) -> ea_t Calculate the value of the reference base.
|
|
"qstring *" get_offset_expression |
( |
* | args | ) |
|
This function uses offset translation function ( processor_t::translate) if your IDP module has such a function. Translation function is used to map linear addresses in the program (only for offsets).
Example: suppose we have instruction at linear address 0x00011000: mov ax, [bx+7422h] and at ds:7422h: array dw ... We want to represent the second operand with an offset expression, so then we call: get_offset_expresion(0x001100, 1, 0x001102, 0x7422, buf); | | | | | | | | | +output buffer | | | +value of offset expression | | +address offset value in the instruction | +the second operand +address of instruction and the function will return a colored string: offset array
- Parameters
-
ea | (C++: ea_t) start of instruction or data with the offset expression |
n | (C++: int) operand number (may be ORed with OPND_OUTER)
- 0: first operand
- 1: second operand
- ...
- 7: eighth operand
|
from | (C++: ea_t) linear address of instruction operand or data referring to the name. This address will be used to get fixup information, so it should point to exact position of operand in the instruction. |
offset | (C++: adiff_t) value of operand or its part. The function will return text representation of this value as offset expression. |
getn_flags | (C++: int) combination of:
- GETN_APPZERO: meaningful only if the name refers to a structure. appends the struct field name if the field offset is zero
- GETN_NODUMMY: do not generate dummy names for the expression but pretend they already exist (useful to verify that the offset expression can be represented)
|
- Return values
-
0 | can't convert to offset expression |
1 | ok, a simple offset expression |
2 | ok, a complex offset expression |