How to use the reil.arm.operand function in reil

To help you get started, we’ve selected a few reil examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github c01db33f / reil / arm / arithmetic.py View on Github external
def arm_add(ctx, i):
    if len(i.operands) == 3:
        dst_idx = 0
        a_idx = 1
        b_idx = 2
    else:
        dst_idx = 0
        a_idx = 0
        b_idx = 1

    a = operand.get(ctx, i, a_idx)
    b = operand.get(ctx, i, b_idx)

    result = ctx.tmp(a.size * 2)

    ctx.emit(  add_  (a, b, result))

    if i.update_flags:
        raise NotImplementedError()

    operand.set(ctx, i, dst_idx, result)
github c01db33f / reil / arm / control_flow.py View on Github external
def arm_blx(ctx, i):
    target = operand.get(ctx, i, 0)

    pc = operand.get_register(ctx, i, 'pc')
    if ctx.thumb:
        prev_pc = pc
        pc = ctx.tmp(32)
        ctx.emit(  or_   (prev_pc, imm(1, 32), pc))

    operand.set_register(ctx, i, 'lr', pc)
    ctx.emit(  jcc_  (imm(1, 8), target))
github c01db33f / reil / arm / control_flow.py View on Github external
def arm_b(ctx, i):
    target = operand.get(ctx, i, 0)
    ctx.emit(  jcc_  (imm(1, 8), target))
github c01db33f / reil / arm / memory.py View on Github external
def _arm_mov(ctx, i):
    prev_value = operand.get(ctx, i, 1)
    value = ctx.tmp(ctx.word_size)

    ctx.emit(  str_  (prev_value, value))

    if i.update_flags:
        set_N(ctx, value)
        set_Z(ctx, value)

    operand.set(ctx, i, 0, value)
github c01db33f / reil / arm / memory.py View on Github external
def arm_movt(ctx, i):
    # first extract the low 16 bits of the destination
    prev_value = operand.get(ctx, i, 0)
    value = ctx.tmp(ctx.word_size)

    ctx.emit(  and_  (prev_value, imm(mask(16), 32), value))

    # then compute the high 16 bits
    prev_result = operand.get(ctx, i, 1)
    result = ctx.tmp(ctx.word_size)

    ctx.emit(  str_  (prev_result, result))
    ctx.emit(  lshl_ (result, imm(16, 32), result))

    ctx.emit(  or_   (value, result, result))

    if i.update_flags:
        set_N(ctx, result)
        set_Z(ctx, result)

    operand.set(ctx, i, 0, result)
github c01db33f / reil / arm / arithmetic.py View on Github external
else:
        dst_idx = 0
        a_idx = 0
        b_idx = 1

    a = operand.get(ctx, i, a_idx)
    b = operand.get(ctx, i, b_idx)

    result = ctx.tmp(a.size * 2)

    ctx.emit(  add_  (a, b, result))

    if i.update_flags:
        raise NotImplementedError()

    operand.set(ctx, i, dst_idx, result)