6 #define rz_il_op_new_0(sort, id) \
8 ret = RZ_NEW0(RzILOp##sort); \
15 #define rz_il_op_new_1(sort, id, t, s, v0) \
17 ret = RZ_NEW0(RzILOp##sort); \
25 #define rz_il_op_new_2(sort, id, t, s, v0, v1) \
27 ret = RZ_NEW0(RzILOp##sort); \
36 #define rz_il_op_new_3(sort, id, t, s, v0, v1, v2) \
38 ret = RZ_NEW0(RzILOp##sort); \
645 prev_seq->
op.
seq.
y = cur_op;
755 #undef rz_il_op_new_0
756 #undef rz_il_op_new_1
757 #undef rz_il_op_new_2
758 #undef rz_il_op_new_3
769 #define DUP_OP1(arg, m0) \
771 r->op.arg.m0 = rz_il_op_pure_dup(op->op.arg.m0); \
772 if (!r->op.arg.m0) { \
776 #define DUP_OP2(arg, m0, m1) \
778 r->op.arg.m0 = rz_il_op_pure_dup(op->op.arg.m0); \
779 r->op.arg.m1 = rz_il_op_pure_dup(op->op.arg.m1); \
780 if (!r->op.arg.m0 || !r->op.arg.m1) { \
781 rz_il_op_pure_free(r->op.arg.m0); \
782 rz_il_op_pure_free(r->op.arg.m1); \
786 #define DUP_OP3(arg, m0, m1, m2) \
788 r->op.arg.m0 = rz_il_op_pure_dup(op->op.arg.m0); \
789 r->op.arg.m1 = rz_il_op_pure_dup(op->op.arg.m1); \
790 r->op.arg.m2 = rz_il_op_pure_dup(op->op.arg.m2); \
791 if (!r->op.arg.m0 || !r->op.arg.m1 || !r->op.arg.m2) { \
792 rz_il_op_pure_free(r->op.arg.m0); \
793 rz_il_op_pure_free(r->op.arg.m1); \
794 rz_il_op_pure_free(r->op.arg.m2); \
801 r->op.var.v =
op->op.var.v;
802 r->op.var.kind =
op->op.var.kind;
808 r->op.let.name =
op->op.let.name;
891 r->op.cast.length =
op->op.cast.length;
898 r->op.load.mem =
op->op.load.mem;
902 r->op.loadw.mem =
op->op.loadw.mem;
903 r->op.loadw.n_bits =
op->op.loadw.n_bits;
916 #define rz_il_op_free_1(sort, s, v0) \
917 rz_il_op_##sort##_free(op->op.s.v0);
919 #define rz_il_op_free_2(sort, s, v0, v1) \
920 rz_il_op_##sort##_free(op->op.s.v0); \
921 rz_il_op_##sort##_free(op->op.s.v1);
923 #define rz_il_op_free_3(sort, s, v0, v1, v2) \
924 rz_il_op_##sort##_free(op->op.s.v0); \
925 rz_il_op_##sort##_free(op->op.s.v1); \
926 rz_il_op_##sort##_free(op->op.s.v2);
1081 #undef rz_il_op_free_0
1082 #undef rz_il_op_free_1
1083 #undef rz_il_op_free_2
1084 #undef rz_il_op_free_3
static RzILOpEffect * sdiv(cs_insn *insn, bool is_thumb)
static RzILOpEffect * mul(cs_insn *insn, bool is_thumb)
static ut32 neg(ArmOp *op)
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len key
static static sync static getppid static getegid const char static filename char static len const char char static bufsiz static mask static vfork const void static prot static getpgrp const char static swapflags static arg static fd static protocol static who struct sockaddr static addrlen static backlog struct timeval struct timezone static tz const struct iovec static count static mode const void const struct sockaddr static tolen const char static pathname void static offset struct stat static buf void long static basep static whence static length const void static len static semflg const void static shmflg const struct timespec struct timespec static rem const char static group const void length
RZ_API void Ht_() free(HtName_(Ht) *ht)
RZ_API RZ_OWN RzILOpPure * rz_il_op_new_loadw(RzILMemIndex mem, RZ_NONNULL RzILOpBitVector *key, ut32 n_bits)
Helper to create RzILOpArgsLoadW.
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_blk(RZ_NONNULL const char *label, RZ_NONNULL RzILOpEffect *data_eff, RZ_NONNULL RzILOpEffect *ctrl_eff)
op structure for blk (label -> data eff -> ctrl eff -> unit eff)
#define rz_il_op_free_1(sort, s, v0)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_shiftl(RZ_NONNULL RzILOpBool *fill_bit, RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for left shift (bool -> 's bitv -> 'b bitv -> 's bitv)
#define rz_il_op_new_1(sort, id, t, s, v0)
#define rz_il_op_new_3(sort, id, t, s, v0, v1, v2)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_log_xor(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpPure * rz_il_op_new_load(RzILMemIndex mem, RZ_NONNULL RzILOpPure *key)
Helper to create RzILOpArgsLoad.
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_log_and(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_branch(RZ_NONNULL RzILOpBool *condition, RZ_NULLABLE RzILOpEffect *true_eff, RZ_NULLABLE RzILOpEffect *false_eff)
op structure for branch (bool -> 'a eff -> 'a eff -> 'a eff)
RZ_API RZ_OWN RzILOpPure * rz_il_op_new_let(RZ_NONNULL const char *name, RZ_NONNULL RzILOpPure *exp, RZ_NONNULL RzILOpPure *body)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_repeat(RZ_NONNULL RzILOpBool *condition, RZ_NONNULL RzILOpEffect *data_eff)
op structure for repeat (bool -> data eff -> data eff)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_empty()
oop structure for an empty effect (val empty : 'a sort -> 'a t)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_ult(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
#define DUP_OP2(arg, m0, m1)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_b1()
op structure for bool true
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_sub(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpPure * rz_il_op_new_ite(RZ_NONNULL RzILOpPure *condition, RZ_NULLABLE RzILOpPure *x, RZ_NULLABLE RzILOpPure *y)
op structure for ite (bool -> 'a pure -> 'a pure -> 'a pure)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_uge(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_eq(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
RZ_API void rz_il_op_pure_free(RZ_NULLABLE RzILOpPure *op)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_ugt(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_mul(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_shiftr(RZ_NONNULL RzILOpBool *fill_bit, RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for right shift (bool -> 's bitv -> 'b bitv -> 's bitv)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_append(RZ_NONNULL RzILOpBitVector *high, RZ_NONNULL RzILOpBitVector *low)
op structure for appending 2 bitv: MSB:LSB high:low
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_jmp(RZ_NONNULL RzILOpBitVector *dst)
op structure for jmp (_ bitv -> ctrl eff)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_is_zero(RZ_NONNULL RzILOpPure *bv)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_smod(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
#define rz_il_op_free_2(sort, s, v0, v1)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_bool_xor(RZ_NONNULL RzILOpBool *x, RZ_NONNULL RzILOpBool *y)
op structure for xor (bool -> bool -> bool)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_signed(ut32 length, RZ_NONNULL RzILOpBitVector *val)
Extend val to length bits, filling up with val's most significant bit.
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_set(RZ_NONNULL const char *v, bool is_local, RZ_NONNULL RzILOpPure *x)
op structure for set ('a var -> 'a pure -> data eff)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_bool_and(RZ_NONNULL RzILOpBool *x, RZ_NONNULL RzILOpBool *y)
op structure for and (bool -> bool -> bool)
RZ_API void rz_il_op_effect_free(RZ_NULLABLE RzILOpEffect *op)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_log_or(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_bool_or(RZ_NONNULL RzILOpBool *x, RZ_NONNULL RzILOpBool *y)
op structure for or (bool -> bool -> bool)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_bitv_from_st64(ut32 length, st64 number)
op structure for bitvector converted from st64
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_ule(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for sle/ule ('a bitv -> 'a bitv -> bool)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_sdiv(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_neg(RZ_NONNULL RzILOpBitVector *bv)
op structure for neg ('s bitv -> 's bitv)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_store(RzILMemIndex mem, RZ_NONNULL RzILOpBitVector *key, RZ_NONNULL RzILOpBitVector *value)
Helper to create RzILOpArgsStoreW.
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_mod(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_bool_inv(RZ_NONNULL RzILOpBool *x)
op structure for inv (!bool -> bool)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_lsb(RZ_NONNULL RzILOpBitVector *bv)
op structure for lsb ('s bitv -> bool) [LSB] lsb x is the least significant bit of x.
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_log_not(RZ_NONNULL RzILOpBitVector *bv)
op structure for not ('s bitv -> 's bitv)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_goto(RZ_NONNULL const char *lbl)
op structure for goto (label -> ctrl eff)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_cast(ut32 length, RZ_NONNULL RzILOpBool *fill, RZ_NONNULL RzILOpBitVector *val)
op structure for casting bitv
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_seqn(ut32 n,...)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_bitv(RZ_NONNULL RzBitVector *value)
op structure for bitvector
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_bitv_from_ut64(ut32 length, ut64 number)
op structure for bitvector converted from ut64
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_msb(RZ_NONNULL RzILOpBitVector *bv)
op structure for msb ('s bitv -> bool) [MSB] msb x is the most significant bit of x.
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_non_zero(RZ_NONNULL RzILOpPure *bv)
#define DUP_OP3(arg, m0, m1, m2)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_b0()
op structure for bool false
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_slt(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_unsigned(ut32 length, RZ_NONNULL RzILOpBitVector *val)
Extend val to length bits, filling up with zeroes.
#define rz_il_op_free_3(sort, s, v0, v1, v2)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_sgt(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_div(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_storew(RzILMemIndex mem, RZ_NONNULL RzILOpBitVector *key, RZ_NONNULL RzILOpBitVector *value)
Helper to create RzILOpArgsStoreW.
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_shiftr_arith(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
alias for shiftr (msb x) x d, right-shift filling up with the left operand's msb
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_add(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
#define rz_il_op_new_2(sort, id, t, s, v0, v1)
#define rz_il_op_new_0(sort, id)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_sge(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
RZ_API RZ_OWN RzILOpPure * rz_il_op_new_var(RZ_NONNULL const char *v, RzILVarKind kind)
op structure for var ('a var -> 'a pure)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_sle(RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *y)
op structure for sle/ule ('a bitv -> 'a bitv -> bool)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_seq(RZ_NONNULL RzILOpEffect *x, RZ_NONNULL RzILOpEffect *y)
op structure for Seq ('a eff -> 'a eff -> 'a eff)
RZ_API RzILOpPure * rz_il_op_pure_dup(RZ_NONNULL RzILOpPure *op)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_nop()
void * load(const char *name, size_t *len)
static void repeat(struct parse *, sopno, int, int)
#define rz_warn_if_reached()
#define rz_return_val_if_fail(expr, val)
RZ_API RZ_OWN RzBitVector * rz_bv_dup(const RZ_NONNULL RzBitVector *bv)
RZ_API void rz_bv_free(RZ_NULLABLE RzBitVector *bv)
RZ_API RZ_OWN RzBitVector * rz_bv_new_from_st64(ut32 length, st64 value)
RZ_API RZ_OWN RzBitVector * rz_bv_new_from_ut64(ut32 length, ut64 value)
signatures of core theory opcodes
#define RZ_LOG_ERROR(fmtstr,...)
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
op structure for appending 2 bitv: MSB:LSB high:low
op structure for inv (!bool -> bool)
op structure for and, or and xor (bool -> bool -> bool)
op structure for branch (bool -> 'a eff -> 'a eff -> 'a eff)
value is a bitvector constant.
RzBitVector * value
value of bitvector
op structure for casting bitv
op structure for binary comparison ops ('a bitv -> 'a bitv -> bool)
op structure for goto (label -> ctrl eff)
op structure for ite (bool -> 'a pure -> 'a pure -> 'a pure)
op structure for jmp (_ bitv -> ctrl eff)
op structure for let_ : 'a var -> 'a pure -> 'b pure -> 'b pure
op structure for load (('a, 'b) mem -> 'a bitv -> 'b bitv)
Load an entire word of arbitrary bit size from a memory.
op structure for Seq ('a eff -> 'a eff -> 'a eff)
RzILOpEffect * y
perform this second
RzILOpEffect * x
perform this first
op structure for set ('a var -> 'a pure -> data eff)
op structure for lshift and rshift (bool -> 's bitv -> 'b bitv -> 's bitv)
op structure for store (('a, 'b) mem -> 'a bitv -> 'b bitv -> ('a, 'b) mem)
Store an entire word of arbitrary bit size into a memory.
op structure for 's bitv -> bool [MSB] msb x is the most significant bit of x. [LSB] lsb x is the lea...
op structure for var ('a var -> 'a pure)
union rz_il_op_effect_t::@287 op
An IL op performing a pure computation, 'a pure.
union rz_il_op_pure_t::@286 op
op structure for blk (label -> data eff -> ctrl eff -> unit eff)
op structure for repeat (bool -> data eff -> data eff)
ut64(WINAPI *w32_GetEnabledXStateFeatures)()