IDA C++ SDK 9.2
Loading...
Searching...
No Matches
cexpr_t Struct Reference

Ctree item: expression. More...

#include <hexrays.hpp>

Inheritance diagram for cexpr_t:
citem_t carg_t

Public Member Functions

bool cpadone () const
 Pointer arithmetic correction done for this expression?
bool is_odd_lvalue () const
bool is_fpop () const
bool is_cstr () const
bool is_type_partial () const
bool is_undef_val () const
bool is_jumpout () const
bool is_vftable () const
void set_cpadone ()
void set_vftable ()
void set_type_partial (bool val=true)
 cexpr_t ()
 cexpr_t (ctype_t cexpr_op, cexpr_t *_x, cexpr_t *_y=nullptr, cexpr_t *_z=nullptr)
 cexpr_t (mba_t *mba, const lvar_t &v)
 cexpr_t (const cexpr_t &r)
void swap (cexpr_t &r)
cexpr_toperator= (const cexpr_t &r)
cexpr_t &hexapi assign (const cexpr_t &r)
 DECLARE_COMPARISONS (cexpr_t)
 ~cexpr_t ()
void hexapi replace_by (cexpr_t *r)
 Replace the expression.
void hexapi cleanup ()
 Cleanup the expression.
void hexapi put_number (cfunc_t *func, uint64 value, int nbytes, type_sign_t sign=no_sign)
 Assign a number to the expression.
void hexapi print1 (qstring *vout, const cfunc_t *func) const
 Print expression into one line.
void hexapi calc_type (bool recursive)
 Calculate the type of the expression.
bool hexapi equal_effect (const cexpr_t &r) const
 Compare two expressions.
bool hexapi is_child_of (const citem_t *parent) const
 Verify if the specified item is our parent.
bool hexapi contains_operator (ctype_t needed_op, int times=1) const
 Check if the expression contains the specified operator.
bool contains_comma (int times=1) const
 Does the expression contain a comma operator?
bool contains_insn (int times=1) const
 Does the expression contain an embedded statement operator?
bool contains_insn_or_label () const
 Does the expression contain an embedded statement operator or a label?
bool contains_comma_or_insn_or_label (int maxcommas=1) const
 Does the expression contain a comma operator or an embedded statement operator or a label?
bool is_nice_expr () const
 Is nice expression?
bool is_nice_cond () const
 Is nice condition?
bool is_call_object_of (const citem_t *parent) const
 Is call object?
bool is_call_arg_of (const citem_t *parent) const
 Is call argument?
type_sign_t get_type_sign () const
 Get expression sign.
bool is_type_unsigned () const
 Is expression unsigned?
bool is_type_signed () const
 Is expression signed?
bit_bound_t hexapi get_high_nbit_bound () const
 Get max number of bits that can really be used by the expression.
int hexapi get_low_nbit_bound () const
 Get min number of bits that are certainly required to represent the expression.
bool hexapi requires_lvalue (const cexpr_t *child) const
 Check if the expression requires an lvalue.
bool hexapi has_side_effects () const
 Check if the expression has side effects.
bool like_boolean () const
 Does the expression look like a boolean expression?
bool is_aliasable () const
 Check if the expression if aliasable.
uint64 numval () const
 Get numeric value of the expression.
bool is_const_value (uint64 _v) const
 Check if the expression is a number with the specified value.
bool is_negative_const () const
 Check if the expression is a negative number.
bool is_non_negative_const () const
 Check if the expression is a non-negative number.
bool is_non_zero_const () const
 Check if the expression is a non-zero number.
bool is_zero_const () const
 Check if the expression is a zero.
bool is_value_used (const citem_t *parent) const
 Does the PARENT need the expression value.
bool get_const_value (uint64 *out) const
 Get expression value.
bool hexapi maybe_ptr () const
 May the expression be a pointer?
cexpr_tget_ptr_or_array ()
 Find pointer or array child.
const cexpr_tfind_op (ctype_t _op) const
 Find the child with the specified operator.
cexpr_tfind_op (ctype_t _op)
const cexpr_tfind_num_op () const
 Find the operand with a numeric value.
cexpr_tfind_num_op ()
const cexpr_tfind_ptr_or_array (bool remove_eqsize_casts) const
 Find the pointer operand.
const cexpr_ttheother (const cexpr_t *what) const
 Get the other operand.
cexpr_ttheother (const cexpr_t *what)
bool get_1num_op (cexpr_t **o1, cexpr_t **o2)
 Get pointers to operands.
bool get_1num_op (const cexpr_t **o1, const cexpr_t **o2) const
const char *hexapi dstr () const
Public Member Functions inherited from citem_t
 citem_t (ctype_t o=cot_empty)
void swap (citem_t &r)
 Swap two citem_t.
bool is_expr () const
 Is an expression?
bool hexapi contains_expr (const cexpr_t *e) const
 Does the item contain an expression?
bool hexapi contains_label () const
 Does the item contain a label?
const citem_t *hexapi find_parent_of (const citem_t *item) const
 Find parent of the specified item.
citem_tfind_parent_of (const citem_t *item)
citem_t *hexapi find_closest_addr (ea_t _ea)
void print1 (qstring *vout, const cfunc_t *func) const
 Print item into one line.
 ~citem_t ()

Public Attributes

union { 
   cnumber_t *   n 
 used for cot_num More...
   fnumber_t *   fpc 
 used for cot_fnum More...
   struct { 
      union { 
         var_ref_t   v 
 used for cot_var More...
         ea_t   obj_ea 
 used for cot_obj More...
      } 
      int   refwidth 
 how many bytes are accessed? (-1: none) More...
   } 
   struct { 
      cexpr_t *   x 
 the first operand of the expression More...
      union { 
         cexpr_t *   y 
 the second operand of the expression More...
         carglist_t *   a 
 argument list (used for cot_call) More...
         uint32   m 
 member offset (used for cot_memptr, cot_memref) for unions, the member number More...
      } 
      union { 
         cexpr_t *   z 
 the third operand of the expression More...
         int   ptrsize 
 memory access size (used for cot_ptr, cot_memptr) More...
      } 
   } 
   cinsn_t *   insn 
 an embedded statement, they are prohibited at the final maturity stage (CMAT_FINAL) More...
   char *   helper 
 helper name (used for cot_helper) More...
   char *   string 
 utf8 string constant, user representation (used for cot_str) More...
}; 
tinfo_t type
 expression type. must be carefully maintained
uint32 exflags = 0
 Expression attributes
Public Attributes inherited from citem_t
ea_t ea = BADADDR
 address that corresponds to the item. may be BADADDR
ctype_t op
 item type
int label_num = -1
 label number.
int index = -1
 an index in cfunc_t::treeitems.

Detailed Description

Ctree item: expression.

Depending on the exact expression item type, various fields of this structure are used.

Constructor & Destructor Documentation

◆ cexpr_t() [1/4]

cexpr_t::cexpr_t ( )
inline

◆ cexpr_t() [2/4]

cexpr_t::cexpr_t ( ctype_t cexpr_op,
cexpr_t * _x,
cexpr_t * _y = nullptr,
cexpr_t * _z = nullptr )
inline

◆ cexpr_t() [3/4]

cexpr_t::cexpr_t ( mba_t * mba,
const lvar_t & v )

◆ cexpr_t() [4/4]

cexpr_t::cexpr_t ( const cexpr_t & r)
inline

◆ ~cexpr_t()

cexpr_t::~cexpr_t ( )
inline

Member Function Documentation

◆ cpadone()

bool cexpr_t::cpadone ( ) const
inline

Pointer arithmetic correction done for this expression?

◆ is_odd_lvalue()

bool cexpr_t::is_odd_lvalue ( ) const
inline

◆ is_fpop()

bool cexpr_t::is_fpop ( ) const
inline

◆ is_cstr()

bool cexpr_t::is_cstr ( ) const
inline

◆ is_type_partial()

bool cexpr_t::is_type_partial ( ) const
inline

◆ is_undef_val()

bool cexpr_t::is_undef_val ( ) const
inline

◆ is_jumpout()

bool cexpr_t::is_jumpout ( ) const
inline

◆ is_vftable()

bool cexpr_t::is_vftable ( ) const
inline

◆ set_cpadone()

void cexpr_t::set_cpadone ( )
inline

◆ set_vftable()

void cexpr_t::set_vftable ( )
inline

◆ set_type_partial()

void cexpr_t::set_type_partial ( bool val = true)
inline

◆ swap()

void cexpr_t::swap ( cexpr_t & r)
inline

◆ operator=()

cexpr_t & cexpr_t::operator= ( const cexpr_t & r)
inline

◆ assign()

cexpr_t & cexpr_t::assign ( const cexpr_t & r)
inline

◆ DECLARE_COMPARISONS()

cexpr_t::DECLARE_COMPARISONS ( cexpr_t )

◆ replace_by()

void cexpr_t::replace_by ( cexpr_t * r)
inline

Replace the expression.

The children of the expression are abandoned (not freed). The expression pointed by 'r' is moved to 'this' expression

Parameters
rthe source expression. It is deleted after being copied

◆ cleanup()

void cexpr_t::cleanup ( )
inline

Cleanup the expression.

This function properly deletes all children and sets the item type to cot_empty.

◆ put_number()

void cexpr_t::put_number ( cfunc_t * func,
uint64 value,
int nbytes,
type_sign_t sign = no_sign )
inline

Assign a number to the expression.

Parameters
funccurrent function
valuenumber value
nbytessize of the number in bytes
signnumber sign

◆ print1()

void cexpr_t::print1 ( qstring * vout,
const cfunc_t * func ) const
inline

Print expression into one line.

Parameters
voutoutput buffer
funcparent function. This argument is used to find out the referenced variable names.

◆ calc_type()

void cexpr_t::calc_type ( bool recursive)
inline

Calculate the type of the expression.

Use this function to calculate the expression type when a new expression is built

Parameters
recursiveif true, types of all children expression will be calculated before calculating our type

◆ equal_effect()

bool cexpr_t::equal_effect ( const cexpr_t & r) const
inline

Compare two expressions.

This function tries to compare two expressions in an 'intelligent' manner. For example, it knows about commutitive operators and can ignore useless casts.

Parameters
rthe expression to compare against the current expression
Returns
true expressions can be considered equal

◆ is_child_of()

bool cexpr_t::is_child_of ( const citem_t * parent) const
inline

Verify if the specified item is our parent.

Parameters
parentpossible parent item
Returns
true if the specified item is our parent

◆ contains_operator()

bool cexpr_t::contains_operator ( ctype_t needed_op,
int times = 1 ) const
inline

Check if the expression contains the specified operator.

Parameters
needed_opoperator code to search for
timeshow many times the operator code should be present
Returns
true if the expression has at least TIMES children with NEEDED_OP

◆ contains_comma()

bool cexpr_t::contains_comma ( int times = 1) const
inline

Does the expression contain a comma operator?

◆ contains_insn()

bool cexpr_t::contains_insn ( int times = 1) const
inline

Does the expression contain an embedded statement operator?

◆ contains_insn_or_label()

bool cexpr_t::contains_insn_or_label ( ) const
inline

Does the expression contain an embedded statement operator or a label?

◆ contains_comma_or_insn_or_label()

bool cexpr_t::contains_comma_or_insn_or_label ( int maxcommas = 1) const
inline

Does the expression contain a comma operator or an embedded statement operator or a label?

◆ is_nice_expr()

bool cexpr_t::is_nice_expr ( ) const
inline

Is nice expression?

Nice expressions do not contain comma operators, embedded statements, or labels.

◆ is_nice_cond()

bool cexpr_t::is_nice_cond ( ) const
inline

Is nice condition?

Nice condition is a nice expression of the boolean type.

◆ is_call_object_of()

bool cexpr_t::is_call_object_of ( const citem_t * parent) const
inline

Is call object?

Returns
true if our expression is the call object of the specified parent expression.

◆ is_call_arg_of()

bool cexpr_t::is_call_arg_of ( const citem_t * parent) const
inline

Is call argument?

Returns
true if our expression is a call argument of the specified parent expression.

◆ get_type_sign()

type_sign_t cexpr_t::get_type_sign ( ) const
inline

Get expression sign.

◆ is_type_unsigned()

bool cexpr_t::is_type_unsigned ( ) const
inline

Is expression unsigned?

◆ is_type_signed()

bool cexpr_t::is_type_signed ( ) const
inline

Is expression signed?

◆ get_high_nbit_bound()

bit_bound_t cexpr_t::get_high_nbit_bound ( ) const
inline

Get max number of bits that can really be used by the expression.

For example, x % 16 can yield only 4 non-zero bits, higher bits are zero

◆ get_low_nbit_bound()

int cexpr_t::get_low_nbit_bound ( ) const
inline

Get min number of bits that are certainly required to represent the expression.

For example, constant 16 always uses 5 bits: 10000.

◆ requires_lvalue()

bool cexpr_t::requires_lvalue ( const cexpr_t * child) const
inline

Check if the expression requires an lvalue.

Parameters
childThe function will check if this child of our expression must be an lvalue.
Returns
true if child must be an lvalue.

◆ has_side_effects()

bool cexpr_t::has_side_effects ( ) const
inline

Check if the expression has side effects.

Calls, pre/post inc/dec, and assignments have side effects.

◆ like_boolean()

bool cexpr_t::like_boolean ( ) const

Does the expression look like a boolean expression?

In other words, its possible values are only 0 and 1.

◆ is_aliasable()

bool cexpr_t::is_aliasable ( ) const

Check if the expression if aliasable.

Simple registers and non-aliasble stack slots return false.

◆ numval()

uint64 cexpr_t::numval ( ) const
inline

Get numeric value of the expression.

This function can be called only on cot_num expressions!

◆ is_const_value()

bool cexpr_t::is_const_value ( uint64 _v) const
inline

Check if the expression is a number with the specified value.

◆ is_negative_const()

bool cexpr_t::is_negative_const ( ) const
inline

Check if the expression is a negative number.

◆ is_non_negative_const()

bool cexpr_t::is_non_negative_const ( ) const
inline

Check if the expression is a non-negative number.

◆ is_non_zero_const()

bool cexpr_t::is_non_zero_const ( ) const
inline

Check if the expression is a non-zero number.

◆ is_zero_const()

bool cexpr_t::is_zero_const ( ) const
inline

Check if the expression is a zero.

◆ is_value_used()

bool cexpr_t::is_value_used ( const citem_t * parent) const

Does the PARENT need the expression value.

◆ get_const_value()

bool cexpr_t::get_const_value ( uint64 * out) const
inline

Get expression value.

Parameters
outPointer to the variable where the expression value is returned.
Returns
true if the expression is a number.

◆ maybe_ptr()

bool cexpr_t::maybe_ptr ( ) const
inline

May the expression be a pointer?

◆ get_ptr_or_array()

cexpr_t * cexpr_t::get_ptr_or_array ( )
inline

Find pointer or array child.

◆ find_op() [1/2]

const cexpr_t * cexpr_t::find_op ( ctype_t _op) const
inline

Find the child with the specified operator.

◆ find_op() [2/2]

cexpr_t * cexpr_t::find_op ( ctype_t _op)
inline

◆ find_num_op() [1/2]

const cexpr_t * cexpr_t::find_num_op ( ) const
inline

Find the operand with a numeric value.

◆ find_num_op() [2/2]

cexpr_t * cexpr_t::find_num_op ( )
inline

◆ find_ptr_or_array()

const cexpr_t * cexpr_t::find_ptr_or_array ( bool remove_eqsize_casts) const

Find the pointer operand.

This function returns the pointer operand for binary expressions.

◆ theother() [1/2]

const cexpr_t * cexpr_t::theother ( const cexpr_t * what) const
inline

Get the other operand.

This function returns the other operand (not the specified one) for binary expressions.

◆ theother() [2/2]

cexpr_t * cexpr_t::theother ( const cexpr_t * what)
inline

◆ get_1num_op() [1/2]

bool cexpr_t::get_1num_op ( cexpr_t ** o1,
cexpr_t ** o2 )
inline

Get pointers to operands.

at last one operand should be a number o1 will be pointer to the number

◆ get_1num_op() [2/2]

bool cexpr_t::get_1num_op ( const cexpr_t ** o1,
const cexpr_t ** o2 ) const
inline

◆ dstr()

const char * cexpr_t::dstr ( ) const
inline

Member Data Documentation

◆ n

cnumber_t* cexpr_t::n

used for cot_num

◆ fpc

fnumber_t* cexpr_t::fpc

used for cot_fnum

◆ v

var_ref_t cexpr_t::v

used for cot_var

◆ obj_ea

ea_t cexpr_t::obj_ea

used for cot_obj

◆ refwidth

int cexpr_t::refwidth

how many bytes are accessed? (-1: none)

◆ x

cexpr_t* cexpr_t::x

the first operand of the expression

◆ y

cexpr_t* cexpr_t::y

the second operand of the expression

◆ a

carglist_t* cexpr_t::a

argument list (used for cot_call)

◆ m

uint32 cexpr_t::m

member offset (used for cot_memptr, cot_memref) for unions, the member number

◆ z

cexpr_t* cexpr_t::z

the third operand of the expression

◆ ptrsize

int cexpr_t::ptrsize

memory access size (used for cot_ptr, cot_memptr)

◆ insn

cinsn_t* cexpr_t::insn

an embedded statement, they are prohibited at the final maturity stage (CMAT_FINAL)

◆ helper

char* cexpr_t::helper

helper name (used for cot_helper)

◆ string

char* cexpr_t::string

utf8 string constant, user representation (used for cot_str)

◆ [union]

union { ... } cexpr_t

◆ type

tinfo_t cexpr_t::type

expression type. must be carefully maintained

◆ exflags

uint32 cexpr_t::exflags = 0

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