IDA SDK
|
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).
Macros | |
#define | MS_N_TYPE 0xFLLU |
Mask for nth arg (a 64-bit constant) | |
#define | FF_N_VOID 0x0 |
Void (unknown)? | |
#define | FF_N_NUMH 0x1 |
Hexadecimal number? | |
#define | FF_N_NUMD 0x2 |
Decimal number? | |
#define | FF_N_CHAR 0x3 |
Char ('x')? | |
#define | FF_N_SEG 0x4 |
Segment? | |
#define | FF_N_OFF 0x5 |
Offset? | |
#define | FF_N_NUMB 0x6 |
Binary number? | |
#define | FF_N_NUMO 0x7 |
Octal number? | |
#define | FF_N_ENUM 0x8 |
Enumeration? | |
#define | FF_N_FOP 0x9 |
Forced operand? | |
#define | FF_N_STRO 0xA |
Struct offset? | |
#define | FF_N_STK 0xB |
Stack variable? | |
#define | FF_N_FLT 0xC |
Floating point number? | |
#define | FF_N_CUST 0xD |
Custom representation? | |
#define | OPND_OUTER 0x80 |
outer offset base (combined with operand number). More... | |
#define | OPND_MASK 0x0F |
mask for operand number | |
#define | OPND_ALL OPND_MASK |
all operands | |
Functions | |
constexpr int | get_operand_type_shift (uint32 n) |
Get the shift in `flags64_t` for the nibble representing operand `n`'s type. More... | |
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. More... | |
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`. More... | |
idaman bool ida_export | op_adds_xrefs (flags64_t F, int n) |
Should processor module create xrefs from the operand?. More... | |
idaman bool ida_export | set_op_type (ea_t ea, flags64_t type, int n) |
(internal function) change representation of operand(s). More... | |
idaman bool ida_export | op_seg (ea_t ea, int n) |
Set operand representation to be 'segment'. More... | |
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. More... | |
idaman tid_t ida_export | get_enum_id (uchar *serial, ea_t ea, int n) |
Get enum id of 'enum' operand. More... | |
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'. More... | |
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. More... | |
idaman int ida_export | get_stroff_path (tid_t *path, adiff_t *delta, ea_t ea, int n) |
Get struct path of operand. More... | |
idaman bool ida_export | op_stkvar (ea_t ea, int n) |
Set operand representation to be 'stack variable'. More... | |
idaman bool ida_export | set_forced_operand (ea_t ea, int n, const char *op) |
Set forced operand. More... | |
idaman ssize_t ida_export | get_forced_operand (qstring *buf, ea_t ea, int n) |
Get forced operand. More... | |
idaman bool ida_export | is_forced_operand (ea_t ea, int n) |
Is operand manually defined?. More... | |
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. More... | |
idaman int ida_export | get_default_radix (void) |
Get default base of number for the current processor. More... | |
idaman int ida_export | get_radix (flags64_t F, int n) |
Get radix of the operand, in: flags. More... | |
#define OPND_OUTER 0x80 |
outer offset base (combined with operand number).
used only in set, get, del_offset() functions
|
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 |
idaman bool ida_export op_adds_xrefs | ( | flags64_t | F, |
int | n | ||
) |
Should processor module create xrefs from the operand?.
Currently 'offset' and 'structure offset' operands create xrefs
idaman bool ida_export set_op_type | ( | ea_t | ea, |
flags64_t | type, | ||
int | n | ||
) |
(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) |
idaman bool ida_export op_seg | ( | ea_t | ea, |
int | n | ||
) |
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 |
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. |
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.
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 |
idaman int ida_export get_stroff_path | ( | tid_t * | path, |
adiff_t * | delta, | ||
ea_t | ea, | ||
int | n | ||
) |
idaman bool ida_export op_stkvar | ( | ea_t | ea, |
int | n | ||
) |
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 |
idaman bool ida_export set_forced_operand | ( | ea_t | ea, |
int | n, | ||
const char * | op | ||
) |
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 |
idaman bool ida_export is_forced_operand | ( | ea_t | ea, |
int | n | ||
) |
Is operand manually defined?.
ea | linear address |
n | 0..UA_MAXOP-1 operand number |
idaman bool ida_export clr_op_type | ( | ea_t | ea, |
int | n | ||
) |
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) |