IDA C++ SDK 9.2
|
Represent instruction/data operands. More...
Functions | |
constexpr int | get_operand_type_shift (uint32 n) |
Get the shift in flags64_t for the nibble representing operand n's type. | |
constexpr flags64_t | get_operand_flag (uint8 typebits, int n) |
Place operand n's type flag in the right nibble of a 64-bit flags set. | |
constexpr bool | is_flag_for_operand (flags64_t F, uint8 typebits, int n) |
Check that the 64-bit flags set has the expected type for operand n. | |
idaman bool ida_export | op_adds_xrefs (flags64_t F, int n) |
Should processor module create xrefs from the operand? | |
idaman bool ida_export | set_op_type (ea_t ea, flags64_t type, int n) |
(internal function) change representation of operand(s). | |
idaman bool ida_export | op_seg (ea_t ea, int n) |
Set operand representation to be 'segment'. | |
idaman bool ida_export | op_enum (ea_t ea, int n, tid_t id, uchar serial=0) |
Set operand representation to be enum type If applied to unexplored bytes, converts them to 16/32bit word data. | |
idaman tid_t ida_export | get_enum_id (uchar *serial, ea_t ea, int n) |
Get enum id of 'enum' operand. | |
idaman bool ida_export | op_stroff (const insn_t &insn, int n, const tid_t *path, int path_len, adiff_t delta) |
Set operand representation to be 'struct offset'. | |
idaman bool ida_export | op_based_stroff (const insn_t &insn, int n, adiff_t opval, ea_t base) |
Set operand representation to be 'struct offset' if the operand likely points to a structure member. | |
idaman int ida_export | get_stroff_path (tid_t *path, adiff_t *delta, ea_t ea, int n) |
Get struct path of operand. | |
idaman bool ida_export | op_stkvar (ea_t ea, int n) |
Set operand representation to be 'stack variable'. | |
idaman bool ida_export | set_forced_operand (ea_t ea, int n, const char *op) |
Set forced operand. | |
idaman ssize_t ida_export | get_forced_operand (qstring *buf, ea_t ea, int n) |
Get forced operand. | |
idaman bool ida_export | is_forced_operand (ea_t ea, int n) |
Is operand manually defined? | |
constexpr flags64_t idaapi | combine_flags (flags64_t F) |
idaman bool ida_export | op_custfmt (ea_t ea, int n, int fid) |
Set custom data format for operand (fid-custom data format id) | |
idaman bool ida_export | clr_op_type (ea_t ea, int n) |
Remove operand representation information. | |
idaman int ida_export | get_default_radix (void) |
Get default base of number for the current processor. | |
idaman int ida_export | get_radix (flags64_t F, int n) |
Get radix of the operand, in: flags. |
Represent instruction/data operands.
IDA keeps bitmask representations for a maximum of 8 operands:
For data bytes, only the first bitmask is used (i.e. all elements of an array have the same type).
|
inlineconstexpr |
Get the shift in flags64_t for the nibble representing operand n's type.
Note: n must be < UA_MAXOP, and is not checked
n | the operand number |
Place operand n's type flag in the right nibble of a 64-bit flags set.
typebits | the type bits (one of FF_N_) |
n | the operand number |
Check that the 64-bit flags set has the expected type for operand n.
F | the flags |
typebits | the type bits (one of FF_N_) |
n | the operand number |
Should processor module create xrefs from the operand?
Currently 'offset', 'structure offset', 'stack' and 'enum' operands create xrefs
(internal function) change representation of operand(s).
ea | linear address |
type | new flag value (should be obtained from char_flag(), num_flag() and similar functions) |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
1 | ok |
0 | failed (applied to a tail byte) |
Set operand representation to be 'segment'.
If applied to unexplored bytes, converts them to 16/32bit word data
ea | linear address |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
Set operand representation to be enum type If applied to unexplored bytes, converts them to 16/32bit word data.
ea | linear address |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
id | id of enum |
serial | the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several constants with the same value |
Get enum id of 'enum' operand.
ea | linear address |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL one of the operands |
serial | pointer to variable to hold the serial number of the constant in the enumeration |
idaman bool ida_export op_stroff | ( | const insn_t & | insn, |
int | n, | ||
const tid_t * | path, | ||
int | path_len, | ||
adiff_t | delta ) |
Set operand representation to be 'struct offset'.
insn | the instruction |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
path | structure path (strpath). see nalt.hpp for more info. |
path_len | length of the structure path |
delta | struct offset delta. usually 0. denotes the difference between the structure base and the pointer into the structure. |
Set operand representation to be 'struct offset' if the operand likely points to a structure member.
For example, let's there is a structure at 1000 1000 stru_1000 Elf32_Sym <...> the operand #8 will be represented as '#Elf32_Sym.st_size' after the call of 'op_based_stroff(..., 8, 0x1000)' By the way, after the call of 'op_plain_offset(..., 0x1000)' it will be represented as '#(stru_1000.st_size - 0x1000)'
insn | the instruction |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
opval | operand value (usually op_t::value or op_t::addr) |
base | base reference |
Get struct path of operand.
path | buffer for structure path (strpath). see nalt.hpp for more info. |
delta | struct offset delta |
ea | linear address |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL one of the operands |
Set operand representation to be 'stack variable'.
Should be applied to an instruction within a function. Should be applied after creating a stack var using insn_t::create_stkvar().
ea | linear address |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
Set forced operand.
ea | linear address |
n | 0..#UA_MAXOP-1 operand number |
op | text of operand
|
Get forced operand.
buf | output buffer, may be nullptr |
ea | linear address |
n | 0..#UA_MAXOP-1 operand number |
Is operand manually defined?
ea | linear address |
n | 0..#UA_MAXOP-1 operand number |
Set custom data format for operand (fid-custom data format id)
Remove operand representation information.
(set operand representation to be 'undefined')
ea | linear address |
n | 0..#UA_MAXOP-1 operand number, OPND_ALL all operands |
idaman int ida_export get_default_radix | ( | void | ) |
Get default base of number for the current processor.
idaman int ida_export get_radix | ( | flags64_t | F, |
int | n ) |
Get radix of the operand, in: flags.
If the operand is not a number, returns get_default_radix()
F | flags |
n | number of operand (0, 1, -1) |