Latest available version: IDA and decompilers v8.4.240320sp1 see all releases
Hex-Rays logo State-of-the-art binary code analysis tools
email icon
Instruction/Data operands

Represent instruction/data operands. More...

Modules

 Functions: examine operand flags (specific operands)
 
 Functions: examine operand flags (arbitrary operand)
 
 Functions: get type information bits for flags
 
 Functions: set operand representation
 
 Bits: data bytes
 
 Functions: examine data bits
 
 Functions: manipulate data bits
 

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()

constexpr int get_operand_type_shift ( uint32  n)
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
nthe operand number
Returns
the shift to the nibble

◆ get_operand_flag()

constexpr flags64_t get_operand_flag ( uint8  typebits,
int  n 
)
inlineconstexpr

Place operand `n`'s type flag in the right nibble of a 64-bit flags set.

Parameters
typebitsthe type bits (one of `FF_N_`)
nthe operand number
Returns
the shift to the nibble

◆ is_flag_for_operand()

constexpr bool is_flag_for_operand ( flags64_t  F,
uint8  typebits,
int  n 
)
inlineconstexpr

Check that the 64-bit flags set has the expected type for operand `n`.

Parameters
Fthe flags
typebitsthe type bits (one of `FF_N_`)
nthe 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
ealinear address
typenew flag value (should be obtained from char_flag(), num_flag() and similar functions)
n0..UA_MAXOP-1 operand number, OPND_ALL all operands
Return values
1ok
0failed (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
ealinear address
n0..UA_MAXOP-1 operand number, OPND_ALL all operands
Returns
success

◆ op_enum()

idaman bool ida_export op_enum ( ea_t  ea,
int  n,
enum_t  id,
uchar  serial = 0 
)

Set operand representation to be 'enum_t'.

If applied to unexplored bytes, converts them to 16/32bit word data

Parameters
ealinear address
n0..UA_MAXOP-1 operand number, OPND_ALL all operands
idid of enum
serialthe 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()

idaman enum_t ida_export get_enum_id ( uchar serial,
ea_t  ea,
int  n 
)

Get enum id of 'enum' operand.

Parameters
ealinear address
n0..UA_MAXOP-1 operand number, OPND_ALL one of the operands
serialpointer to variable to hold the serial number of the constant in the enumeration
Returns
id of enum or BADNODE

◆ 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
insnthe instruction
n0..UA_MAXOP-1 operand number, OPND_ALL all operands
pathstructure path (strpath). see nalt.hpp for more info.
path_lenlength of the structure path
deltastruct 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
insnthe instruction
n0..UA_MAXOP-1 operand number, OPND_ALL all operands
opvaloperand value (usually op_t::value or op_t::addr)
basebase reference
Returns
success

◆ get_stroff_path()

idaman int ida_export get_stroff_path ( tid_t path,
adiff_t *  delta,
ea_t  ea,
int  n 
)

Get struct path of operand.

Parameters
pathbuffer for structure path (strpath). see nalt.hpp for more info.
deltastruct offset delta
ealinear address
n0..UA_MAXOP-1 operand number, OPND_ALL one of the operands
Returns
length of strpath

◆ 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
ealinear address
n0..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
ealinear address
n0..UA_MAXOP-1 operand number
optext of operand
  • nullptr: do nothing (return 0)
  • "" : delete forced operand
Returns
success

◆ get_forced_operand()

idaman ssize_t ida_export get_forced_operand ( qstring buf,
ea_t  ea,
int  n 
)

Get forced operand.

Parameters
bufoutput buffer, may be nullptr
ealinear address
n0..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
ealinear address
n0..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
ealinear address
n0..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
Fflags
nnumber of operand (0, 1, -1)
Returns
2, 8, 10, 16