| IDA SDK

Modules | Macros | Functions
Instruction/Data operands
Flags structure

## 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).

## 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, 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...

## 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 | ) |
| inline constexpr

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

constexpr flags64_t get_operand_flag | ( | uint8 | typebits,
|  | int | n
| ) |  |
| inline constexpr

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

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

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

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.

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

idaman tid_t ida_export get_enum_id | ( | uchar * | serial,
|  | ea_t | ea,
|  | int | n
| ) |  |

Get enum id of 'enum' operand.

Parameters

  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

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

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

Get struct path of operand.

Parameters

  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

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

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

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

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