IDA C++ SDK 9.2
Loading...
Searching...
No Matches
mcallarg_t Class Reference

A call argument. More...

#include <hexrays.hpp>

Inheritance diagram for mcallarg_t:
mop_t

Public Member Functions

 mcallarg_t ()
 mcallarg_t (const mop_t &rarg)
void copy_mop (const mop_t &op)
void hexapi print (qstring *vout, int shins_flags=SHINS_SHORT|SHINS_VALNUM) const
const char *hexapi dstr () const
void hexapi set_regarg (mreg_t mr, int sz, const tinfo_t &tif)
void set_regarg (mreg_t mr, const tinfo_t &tif)
void set_regarg (mreg_t mr, char dt, type_sign_t sign=type_unsigned)
void make_int (int val, ea_t val_ea, int opno=0)
void make_uint (int val, ea_t val_ea, int opno=0)
Public Member Functions inherited from mop_t
void set_impptr_done ()
void set_udt ()
void set_undef_val ()
void set_lowaddr ()
void set_for_abi ()
bool is_impptr_done () const
bool is_udt () const
bool probably_floating () const
bool is_undef_val () const
bool is_lowaddr () const
bool is_for_abi () const
bool is_ccflags () const
bool is_pcval () const
bool is_glbaddr_from_fixup () const
 mop_t ()
 mop_t (const mop_t &rop)
 mop_t (mreg_t _r, int _s)
mop_toperator= (const mop_t &rop)
mop_t &hexapi assign (const mop_t &rop)
 ~mop_t ()
 HEXRAYS_MEMORY_ALLOCATION_FUNCS () void zero()
void hexapi swap (mop_t &rop)
void hexapi erase ()
void erase_but_keep_size ()
void hexapi print (qstring *vout, int shins_flags=SHINS_SHORT|SHINS_VALNUM) const
const char *hexapi dstr () const
bool hexapi create_from_mlist (mba_t *mba, const mlist_t &lst, sval_t fullsize)
 Create operand from mlist_t.
bool hexapi create_from_ivlset (mba_t *mba, const ivlset_t &ivs, sval_t fullsize)
 Create operand from ivlset_t.
void hexapi create_from_vdloc (mba_t *mba, const vdloc_t &loc, int _size)
 Create operand from vdloc_t.
void hexapi create_from_scattered_vdloc (mba_t *mba, const char *name, tinfo_t type, const vdloc_t &loc)
 Create operand from scattered vdloc_t.
void hexapi create_from_insn (const minsn_t *m)
 Create operand from an instruction.
void hexapi make_number (uint64 _value, int _size, ea_t _ea=BADADDR, int opnum=0)
 Create an integer constant operand.
bool hexapi make_fpnum (const void *bytes, size_t _size)
 Create a floating point constant operand.
void _make_reg (mreg_t reg)
 Create a register operand without erasing previous data.
void _make_reg (mreg_t reg, int _size)
void make_reg (mreg_t reg)
 Create a register operand.
void make_reg (mreg_t reg, int _size)
void _make_lvar (mba_t *mba, int idx, sval_t off=0)
 Create a local variable operand.
void hexapi _make_gvar (ea_t ea)
 Create a global variable operand without erasing previous data.
void hexapi make_gvar (ea_t ea)
 Create a global variable operand.
void _make_stkvar (mba_t *mba, sval_t off)
 Create a stack variable operand.
void make_stkvar (mba_t *mba, sval_t off)
void hexapi make_reg_pair (int loreg, int hireg, int halfsize)
 Create pair of registers.
void _make_insn (minsn_t *ins)
 Create a nested instruction without erasing previous data.
void make_insn (minsn_t *ins)
 Create a nested instruction.
void _make_blkref (int blknum)
 Create a block reference operand without erasing previous data.
void make_blkref (int blknum)
 Create a global variable operand.
void hexapi make_helper (const char *name)
 Create a helper operand.
void _make_strlit (const char *str)
 Create a constant string operand.
void _make_strlit (qstring *str)
void _make_callinfo (mcallinfo_t *fi)
 Create a call info operand without erasing previous data.
void _make_cases (mcases_t *_cases)
 Create a 'switch cases' operand without erasing previous data.
void _make_pair (mop_pair_t *_pair)
 Create a pair operand without erasing previous data.
bool empty () const
bool is_glbvar () const
 Is a global variable?
bool is_stkvar () const
 Is a stack variable?
bool is_reg () const
 Is a register operand?
bool is_reg (mreg_t _r) const
 Is the specified register?
bool is_reg (mreg_t _r, int _size) const
 Is the specified register of the specified size?
bool is_arglist () const
 Is a list of arguments?
bool is_cc () const
 Is a condition code?
bool is_bit_reg () const
bool is_kreg () const
 Is a kernel register?
bool is_mblock () const
 Is a block reference?
bool is_mblock (int serial) const
 Is a block reference to the specified block?
bool is_scattered () const
 Is a scattered operand?
bool is_glbaddr () const
 Is address of a global memory cell?
bool is_glbaddr (ea_t ea) const
 Is address of the specified global memory cell?
bool is_stkaddr () const
 Is address of a stack variable?
bool is_insn () const
 Is a sub-instruction?
bool is_insn (mcode_t code) const
 Is a sub-instruction with the specified opcode?
bool has_side_effects (bool include_ldx_and_divs=false) const
 Has any side effects?
bool hexapi may_use_aliased_memory () const
 Is it possible for the operand to use aliased memory?
bool hexapi is01 () const
 Are the possible values of the operand only 0 and 1?
bool hexapi is_sign_extended_from (int nbytes) const
 Does the high part of the operand consist of the sign bytes?
bool hexapi is_zero_extended_from (int nbytes) const
 Does the high part of the operand consist of zero bytes?
bool is_extended_from (int nbytes, bool is_signed) const
 Does the high part of the operand consist of zero or sign bytes?
bool hexapi equal_mops (const mop_t &rop, int eqflags) const
 Compare operands.
bool operator== (const mop_t &rop) const
bool operator!= (const mop_t &rop) const
bool operator< (const mop_t &rop) const
 Lexographical operand comparison.
int hexapi lexcompare (const mop_t &rop) const
int hexapi for_all_ops (mop_visitor_t &mv, const tinfo_t *type=nullptr, bool is_target=false)
 Visit the operand and all its sub-operands.
int hexapi for_all_scattered_submops (scif_visitor_t &sv) const
 Visit all sub-operands of a scattered operand.
uint64 value (bool is_signed) const
 Retrieve value of a constant integer operand.
int64 signed_value () const
uint64 unsigned_value () const
void update_numop_value (uint64 val)
bool hexapi is_constant (uint64 *out=nullptr, bool is_signed=true) const
 Retrieve value of a constant integer operand.
bool is_equal_to (uint64 n, bool is_signed=true) const
bool is_zero () const
bool is_one () const
bool is_positive_constant () const
bool is_negative_constant () const
ssize_t get_stkvar (udm_t *udm=nullptr, uval_t *p_idaoff=nullptr) const
 Retrieve the referenced stack variable.
bool hexapi get_stkoff (sval_t *p_vdoff) const
 Get the referenced stack offset.
const minsn_tget_insn (mcode_t code) const
 Get subinstruction of the operand.
minsn_tget_insn (mcode_t code)
bool hexapi make_low_half (int width)
 Make the low part of the operand.
bool hexapi make_high_half (int width)
 Make the high part of the operand.
bool hexapi make_first_half (int width)
 Make the first part of the operand.
bool hexapi make_second_half (int width)
 Make the second part of the operand.
bool hexapi shift_mop (int offset)
 Shift the operand.
bool hexapi change_size (int nsize, side_effect_t sideff=WITH_SIDEFF)
 Change the operand size.
bool double_size (side_effect_t sideff=WITH_SIDEFF)
bool hexapi preserve_side_effects (mblock_t *blk, minsn_t *top, bool *moved_calls=nullptr)
 Move subinstructions with side effects out of the operand.
void hexapi apply_ld_mcode (mcode_t mcode, ea_t ea, int newsize)
 Apply a unary opcode to the operand.
void apply_xdu (ea_t ea, int newsize)
void apply_xds (ea_t ea, int newsize)

Public Attributes

ea_t ea = BADADDR
 address where the argument was initialized.
tinfo_t type
 formal argument type
qstring name
 formal argument name
argloc_t argloc
 ida argloc
uint32 flags = 0
 FAI_...
Public Attributes inherited from mop_t
mopt_t t
 Operand type.
uint8 oprops
 Operand properties.
uint16 valnum
 Value number.
int size
 Operand size.
union { 
   mreg_t   r 
   mnumber_t *   nnn 
   minsn_t *   d 
   stkvar_ref_t *   s 
   ea_t   g 
   int   b 
   mcallinfo_t *   f 
   lvar_ref_t *   l 
   mop_addr_t *   a 
   char *   helper 
   char *   cstr 
   mcases_t *   c 
   fnumber_t *   fpc 
   mop_pair_t *   pair 
   scif_t *   scif 
}; 
 The following union holds additional details about the operand.

Additional Inherited Members

Static Public Member Functions inherited from mop_t
static bool hexapi is_bit_reg (mreg_t reg)
 Is a bit register?

Detailed Description

A call argument.

Constructor & Destructor Documentation

◆ mcallarg_t() [1/2]

mcallarg_t::mcallarg_t ( )
inline

◆ mcallarg_t() [2/2]

mcallarg_t::mcallarg_t ( const mop_t & rarg)
inline

Member Function Documentation

◆ copy_mop()

void mcallarg_t::copy_mop ( const mop_t & op)
inline

◆ print()

void mcallarg_t::print ( qstring * vout,
int shins_flags = SHINS_SHORT|SHINS_VALNUM ) const
inline

◆ dstr()

const char * mcallarg_t::dstr ( ) const
inline

◆ set_regarg() [1/3]

void mcallarg_t::set_regarg ( mreg_t mr,
int sz,
const tinfo_t & tif )
inline

◆ set_regarg() [2/3]

void mcallarg_t::set_regarg ( mreg_t mr,
const tinfo_t & tif )
inline

◆ set_regarg() [3/3]

void mcallarg_t::set_regarg ( mreg_t mr,
char dt,
type_sign_t sign = type_unsigned )
inline

◆ make_int()

void mcallarg_t::make_int ( int val,
ea_t val_ea,
int opno = 0 )
inline

◆ make_uint()

void mcallarg_t::make_uint ( int val,
ea_t val_ea,
int opno = 0 )
inline

Member Data Documentation

◆ ea

ea_t mcallarg_t::ea = BADADDR

address where the argument was initialized.

BADADDR means unknown.

◆ type

tinfo_t mcallarg_t::type

formal argument type

◆ name

qstring mcallarg_t::name

formal argument name

◆ argloc

argloc_t mcallarg_t::argloc

ida argloc

◆ flags

uint32 mcallarg_t::flags = 0

FAI_...


The documentation for this class was generated from the following file: