Represent instruction/data operands. More...
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, enum_t id, uchar serial=0) |
Set operand representation to be 'enum_t'. More... | |
idaman enum_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... | |
Detailed Description
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).
Macro Definition Documentation
◆ OPND_OUTER
#define OPND_OUTER 0x80 |
outer offset base (combined with operand number).
used only in set, get, del_offset() functions
Function Documentation
◆ get_operand_type_shift()
|
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
- Parameters
-
n the operand number
- Returns
- the shift to the nibble
◆ get_operand_flag()
Place operand `n`'s type flag in the right nibble of a 64-bit flags set.
- Parameters
-
typebits the type bits (one of `FF_N_`) n the operand number
- Returns
- the shift to the nibble
◆ is_flag_for_operand()
Check that the 64-bit flags set has the expected type for operand `n`.
- Parameters
-
F the flags typebits the type bits (one of `FF_N_`) n the operand number
- Returns
- success
◆ op_adds_xrefs()
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
◆ set_op_type()
idaman bool ida_export set_op_type | ( | ea_t | ea, |
flags64_t | type, | ||
int | n | ||
) |
(internal function) change representation of operand(s).
- Parameters
-
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
- Return values
-
1 ok 0 failed (applied to a tail byte)
◆ op_seg()
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
- Parameters
-
ea linear address n 0..UA_MAXOP-1 operand number, OPND_ALL all operands
- Returns
- success
◆ op_enum()
Set operand representation to be 'enum_t'.
If applied to unexplored bytes, converts them to 16/32bit word data
- Parameters
-
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
- Returns
- success
◆ get_enum_id()
◆ op_stroff()
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'.
- Parameters
-
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.
- Returns
- success
◆ op_based_stroff()
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)'
- Parameters
-
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
- Returns
- success
◆ get_stroff_path()
idaman int ida_export get_stroff_path | ( | tid_t * | path, |
adiff_t * | delta, | ||
ea_t | ea, | ||
int | n | ||
) |
◆ op_stkvar()
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().
- Parameters
-
ea linear address n 0..UA_MAXOP-1 operand number, OPND_ALL all operands
- Returns
- success
◆ set_forced_operand()
idaman bool ida_export set_forced_operand | ( | ea_t | ea, |
int | n, | ||
const char * | op | ||
) |
Set forced operand.
- Parameters
-
ea linear address n 0..UA_MAXOP-1 operand number op text of operand - nullptr: do nothing (return 0)
- "" : delete forced operand
- Returns
- success
◆ get_forced_operand()
Get forced operand.
- Parameters
-
buf output buffer, may be nullptr ea linear address n 0..UA_MAXOP-1 operand number
- Returns
- size of forced operand or -1
◆ is_forced_operand()
idaman bool ida_export is_forced_operand | ( | ea_t | ea, |
int | n | ||
) |
Is operand manually defined?.
- Parameters
-
ea linear address n 0..UA_MAXOP-1 operand number
◆ clr_op_type()
idaman bool ida_export clr_op_type | ( | ea_t | ea, |
int | n | ||
) |
Remove operand representation information.
(set operand representation to be 'undefined')
- Parameters
-
ea linear address n 0..UA_MAXOP-1 operand number, OPND_ALL all operands
- Returns
- success
◆ get_default_radix()
idaman int ida_export get_default_radix | ( | void | ) |
Get default base of number for the current processor.
- Returns
- 2, 8, 10, 16
◆ get_radix()
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()
- Parameters
-
F flags n number of operand (0, 1, -1)
- Returns
- 2, 8, 10, 16
Generated by 1.9.3