def dw_op_gnu(obj, enc, data): sz = env.op_ptr.size if data.size < sz: raise InstructionError(obj) result = XXX obj.operands = [env.cst(XXX.int(), sz)] obj.bytes += pack(result) obj.type = type_data_processing
def dw_op_const(obj, data): sz = 8 * obj.sz if data.size < sz: raise InstructionError(obj) result = data[0:sz] obj.operands = [env.cst(result.int(obj.sign), WORD)] obj.bytes += pack(result) obj.type = type_data_processing
def dw_op_addr(obj, data): sz = env.op_ptr.size if data.size < sz: raise InstructionError(obj) result = data[0:sz] obj.operands = [env.cst(result.int(), sz)] obj.bytes += pack(result) obj.type = type_data_processing
def dw_op_breg(obj, data, _num): data = pack(data) result, blen = read_sleb128(data) sz = env.op_ptr.size offset = env.cst(result, blen * 8).signextend(sz) obj.operands = [env.reg("reg%d" % _num, sz) + offset] obj.bytes += data[:blen] obj.type = type_data_processing
def dw_op_const(obj, data): sz = env.op_ptr.size if data.size < sz: raise InstructionError(obj) data = pack(data) result, blen = read_leb128(data, obj.sign) obj.operands = [env.cst(result, WORD)] obj.bytes += data[:blen] obj.type = type_data_processing
def dw_op_bregx(obj, data): data = pack(data) indx, blen = read_leb128(data) sz = env.op_ptr.size r = env.reg("reg%d" % indx, sz) obj.bytes += data[:blen] data = data[blen:] result, blen = read_sleb128(data) offset = env.cst(result, blen * 8).signextend(sz) obj.operands = [r + offset] obj.bytes += data[:blen] obj.type = type_data_processing
def dw_op_lit(obj, _num): obj.operands = [env.cst(_num, WORD)] obj.type = type_data_processing
def dw_op_leb128(obj, data): data = pack(data) result, blen = read_leb128(data) obj.operands = [env.cst(result, WORD)] obj.bytes += data[:blen] obj.type = type_data_processing
def dw_op_jmp(obj, offset): obj.operands = [env.cst(offset.int(-1), WORD)] obj.type = type_control_flow