5 #ifndef RZ_IL_OPCODES_H
6 #define RZ_IL_OPCODES_H
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 RZ_OWN RzILOpBitVector * rz_il_op_new_neg(RZ_NONNULL RzILOpBitVector *value)
op structure for neg ('s bitv -> 's bitv)
RZ_API RZ_NONNULL const char * rz_il_op_pure_code_stringify(RzILOpPureCode code)
struct rzil_op_blk_t RzILOpArgsBlk
op structure for blk (label -> data eff -> ctrl eff -> unit eff)
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)
struct rz_il_op_args_seq_t RzILOpArgsSeq
op structure for Seq ('a eff -> 'a eff -> 'a eff)
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 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_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)
struct rzil_op_repeat_t RzILOpArgsRepeat
op structure for repeat (bool -> data eff -> data eff)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_goto(RZ_NONNULL const char *label)
op structure for goto (label -> ctrl eff)
struct rz_il_op_args_storew_t RzILOpArgsStoreW
Store an entire word of arbitrary bit size into a memory.
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_ule(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
op structure for sle/ule ('a bitv -> 'a bitv -> bool)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_shiftl(RZ_NONNULL RzILOpBool *fill_bit, RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *sh)
op structure for left shift (bool -> 's bitv -> 'b bitv -> 's bitv)
RZ_API void rz_il_op_pure_free(RZ_NULLABLE RzILOpPure *op)
struct rz_il_op_args_load_t RzILOpArgsLoad
op structure for load (('a, 'b) mem -> 'a bitv -> 'b bitv)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_lsb(RZ_NONNULL RzILOpPure *val)
op structure for lsb ('s bitv -> bool) [LSB] lsb x is the least significant bit of x.
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)
struct rz_il_op_args_jmp_t RzILOpArgsJmp
op structure for jmp (_ bitv -> ctrl eff)
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
struct rz_il_op_args_var_t RzILOpArgsVar
op structure for var ('a var -> 'a pure)
struct rz_il_op_args_append_t RzILOpArgsAppend
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 void rz_il_op_effect_json(RZ_NONNULL RzILOpEffect *op, RZ_NONNULL PJ *pj)
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)
struct rz_il_op_args_bv_t RzILOpArgsBv
value is a bitvector constant.
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 void rz_il_op_pure_json(RZ_NONNULL RzILOpPure *op, RZ_NONNULL PJ *pj)
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 RzILOpPure * rz_il_op_new_var(RZ_NONNULL const char *var, RzILVarKind kind)
op structure for var ('a var -> 'a pure)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_msb(RZ_NONNULL RzILOpPure *val)
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_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 RzILOpBitVector * rz_il_op_new_shiftr(RZ_NONNULL RzILOpBool *fill_bit, RZ_NONNULL RzILOpBitVector *x, RZ_NONNULL RzILOpBitVector *sh)
op structure for right shift (bool -> 's bitv -> 'b bitv -> 's bitv)
struct rz_il_op_args_loadw_t RzILOpArgsLoadW
Load an entire word of arbitrary bit size from a memory.
struct rz_il_op_args_goto_t RzILOpArgsGoto
op structure for goto (label -> ctrl eff)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_bitv_from_ut64(ut32 length, ut64 number)
op structure for bitvector converted from ut64
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_repeat(RZ_NONNULL RzILOpBool *condition, RZ_NONNULL RzILOpEffect *data_effect)
op structure for repeat (bool -> data eff -> data eff)
struct rz_il_op_args_branch_t RzILOpArgsBranch
op structure for branch (bool -> 'a eff -> 'a eff -> 'a eff)
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 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_eq(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
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
RzILOpPure RzILOpBitVector
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_seqn(ut32 n,...)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_loadw(RzILMemIndex mem, RZ_NONNULL RzILOpBitVector *key, ut32 n_bits)
Helper to create RzILOpArgsLoadW.
RZ_API void rz_il_op_effect_stringify(RZ_NONNULL RzILOpEffect *op, RZ_NONNULL RzStrBuf *sb)
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_non_zero(RZ_NONNULL RzILOpPure *bv)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_branch(RZ_NONNULL RzILOpBool *condition, RZ_NULLABLE RzILOpEffect *true_effect, RZ_NULLABLE RzILOpEffect *false_effect)
op structure for branch (bool -> 'a eff -> 'a eff -> 'a eff)
RZ_API void rz_il_op_pure_stringify(RZ_NONNULL RzILOpPure *op, RZ_NONNULL RzStrBuf *sb)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_log_not(RZ_NONNULL RzILOpBitVector *value)
op structure for not ('s bitv -> 's bitv)
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.
struct rz_il_op_args_set_t RzILOpArgsSet
op structure for set ('a var -> 'a pure -> data eff)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_sgt(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
struct rz_il_op_args_store_t RzILOpArgsStore
op structure for store (('a, 'b) mem -> 'a bitv -> 'b bitv -> ('a, 'b) mem)
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
struct rz_il_op_args_let_t RzILOpArgsLet
op structure for let_ : 'a var -> 'a pure -> 'b pure -> 'b pure
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_bitv_from_st64(ut32 length, st64 number)
op structure for bitvector converted from st64
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)
struct rz_il_op_args_ite_t RzILOpArgsIte
op structure for ite (bool -> 'a pure -> 'a pure -> 'a pure)
RZ_API RZ_OWN RzILOpBitVector * rz_il_op_new_load(RzILMemIndex mem, RZ_NONNULL RzILOpBitVector *key)
Helper to create RzILOpArgsLoad.
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_sge(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
RZ_API RZ_OWN RzILOpBool * rz_il_op_new_sle(RZ_NONNULL RzILOpPure *x, RZ_NONNULL RzILOpPure *y)
op structure for sle/ule ('a bitv -> 'a bitv -> bool)
RZ_API RZ_OWN RzILOpEffect * rz_il_op_new_blk(RZ_NONNULL const char *label, RZ_NONNULL RzILOpEffect *data_effect, RZ_NONNULL RzILOpEffect *ctrl_effect)
op structure for blk (label -> data eff -> ctrl eff -> unit eff)
struct rz_il_op_args_cast_t RzILOpArgsCast
op structure for casting bitv
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()
op structure for two-operand algorithm and logical operations ('s bitv -> 's bitv -> 's bitv)
RzILOpBitVector * x
left operand
RzILOpBitVector * y
right operand
op structure for appending 2 bitv: MSB:LSB high:low
RzILOpBitVector * low
bitvector occupying the least significant bits
RzILOpBitVector * high
bitvector occupying the most significant bits
op structure for inv (!bool -> bool)
RzILOpBool * x
single operand
op structure for and, or and xor (bool -> bool -> bool)
RzILOpBool * x
left operand
RzILOpBool * y
right operand
op structure for branch (bool -> 'a eff -> 'a eff -> 'a eff)
RZ_NONNULL RzILOpEffect * true_eff
effect for when condition evaluates to true
RZ_NONNULL RzILOpEffect * false_eff
effect for when condition evaluates to false
value is a bitvector constant.
RzBitVector * value
value of bitvector
RzILOpBitVector * bv
unary operand
op structure for casting bitv
RzILOpBool * fill
If m = size val - length > 0 then m fill-bits are prepended to the most significant part of the vecto...
RzILOpBitVector * val
value to cast
ut32 length
new bits length
op structure for binary comparison ops ('a bitv -> 'a bitv -> bool)
RzILOpBitVector * x
index of operand 1
RzILOpBitVector * y
index of operand 2
op structure for goto (label -> ctrl eff)
const char * lbl
name of the label, const one
op structure for ite (bool -> 'a pure -> 'a pure -> 'a pure)
RzILOpPure * y
index of RzILVal operand 2
RzILOpPure * x
index of RzILVal operand 1
RzILOpBool * condition
index of BOOL condition
op structure for jmp (_ bitv -> ctrl eff)
RzILOpBitVector * dst
index of destination address
op structure for let_ : 'a var -> 'a pure -> 'b pure -> 'b pure
const char * name
name of variable
RzILOpPure * exp
value/expression to bind the variable to
RzILOpPure * body
body in which the variable will be bound and that produces the result
op structure for load (('a, 'b) mem -> 'a bitv -> 'b bitv)
RzILMemIndex mem
index of the mem inside the vm to use
RzILOpBitVector * key
index of the cell (address) in mem, must have exactly the size of a key in the memory
Load an entire word of arbitrary bit size from a memory.
RzILOpBitVector * key
memory index of the RzBitVector key (address)
RzILMemIndex mem
index of the mem inside the vm to use
ut32 n_bits
n of bits to read, and of the resulting bitvector
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)
bool is_local
whether a global variable should be set or a local optionally created and set
const char * v
name of variable, const one
RzILOpPure * x
value to set the variable to
op structure for lshift and rshift (bool -> 's bitv -> 'b bitv -> 's bitv)
RzILOpBitVector * x
index of operand 1
RzILOpBitVector * y
index of operand 2
RzILOpBool * fill_bit
index of fill bit
op structure for store (('a, 'b) mem -> 'a bitv -> 'b bitv -> ('a, 'b) mem)
RzILOpBitVector * value
value to store, must have exactly the size of a memory cell
RzILOpBitVector * key
address where to store to, must have exactly the size of a key in the memory
RzILMemIndex mem
index of memory in the vm to use
Store an entire word of arbitrary bit size into a memory.
RzILOpBitVector * value
value to store, arbitrary size
RzILMemIndex mem
index of memory in the vm to use
RzILOpBitVector * key
address where to store to
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)
RzILVarKind kind
set of variables to pick from
const char * v
name of variable, const one
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
RzILOpArgsBoolInv boolinv
RzILOpArgsShiftRight shiftr
RzILOpArgsBoolXor boolxor
RzILOpArgsShiftLeft shiftl
RzILOpArgsBoolAnd booland
op structure for blk (label -> data eff -> ctrl eff -> unit eff)
RzILOpEffect * data_eff
index of data_eff
const char * label
name of the label, const one
RzILOpEffect * ctrl_eff
index of ctrl_eff
op structure for repeat (bool -> data eff -> data eff)
RzILOpBool * condition
index of BOOL condition
RzILOpEffect * data_eff
index of data effect
ut64(WINAPI *w32_GetEnabledXStateFeatures)()