• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python operand.set函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中reil.x86.operand.set函数的典型用法代码示例。如果您正苦于以下问题:Python set函数的具体用法?Python set怎么用?Python set使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了set函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: x86_pminu

def x86_pminu(ctx, i, size):
    a_id, b_id, dst_id = vex_opnds(i)

    a = operand.get(ctx, i, a_id)
    b = operand.get(ctx, i, b_id)

    a_parts = unpack(ctx, a, size)
    b_parts = unpack(ctx, b, size)

    tmp0 = ctx.tmp(size * 2)
    tmp1 = ctx.tmp(size * 2)

    dst_parts = []
    for a_part, b_part in zip(a_parts, b_parts):
        dst_part = ctx.tmp(size)

        ctx.emit(  sub_  (a_part, b_part, tmp0))
        ctx.emit(  and_  (tmp0, imm(sign_bit(size * 2), size * 2), tmp0))
        ctx.emit(  bisz_ (tmp0, tmp1))
        ctx.emit(  mul_  (b_part, tmp1, tmp0))
        ctx.emit(  xor_  (tmp1, imm(1, size * 2), tmp1))
        ctx.emit(  mul_  (a_part, tmp1, tmp1))
        ctx.emit(  add_  (tmp0, tmp1, tmp0))
        ctx.emit(  str_  (tmp0, dst_part))

        dst_parts.append(dst_part)

    value = pack(ctx, dst_parts)

    operand.set(ctx, i, dst_id, value)
开发者ID:c01db33f,项目名称:reil,代码行数:30,代码来源:sse.py


示例2: x86_movq

def x86_movq(ctx, i):
    value = None

    dst = operand.get(ctx, i, 0)
    value = operand.get(ctx, i, 1)

    operand.set(ctx, i, 0, value, clear=True, sign_extend=False)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:7,代码来源:sse.py


示例3: x86_arpl

def x86_arpl(ctx, i):

    dest_seg = operand.get(ctx, i, 0)
    src_seg = operand.get(ctx, i, 1)

    dest_rpl = ctx.tmp(16)
    src_rpl = ctx.tmp(16)
    tmp0 = ctx.tmp(32)
    tmp1 = ctx.tmp(8)
    result_seg = ctx.tmp(16)
    tmp2 = ctx.tmp(16)

    ctx.emit(  lshr_ (dest_seg, imm(14, 8), dest_rpl))
    ctx.emit(  lshr_ (src_seg, imm(14, 8), src_rpl))

    ctx.emit(  sub_  (dest_seg, src_seg, tmp0))
    ctx.emit(  and_  (tmp0, imm(sign_bit(32), 32), tmp0))
    ctx.emit(  bisz_ (tmp0, tmp1))
    ctx.emit(  jcc_  ('check_passed'))
    ctx.emit(  str_  (imm(1, 8), r('zf', 8)))
    ctx.emit(  and_  (dest_seg, imm(0b0011111111111111, 16), result_seg))
    ctx.emit(  and_  (src_seg, imm(0b1100000000000000, 16), tmp2))
    ctx.emit(  or_   (dest_seg, tmp2, dest_seg))

    operand.set(ctx, i, 0, result_seg)

    ctx.emit(  jcc_  (imm(1, 8), 'done'))

    ctx.emit('check_passed')
    ctx.emit(  str_  (imm(0, 8), r('zf', 8)))

    ctx.emit('done')
    ctx.emit(  nop_())
开发者ID:c01db33f,项目名称:reil,代码行数:33,代码来源:misc.py


示例4: x86_cmpxchg

def x86_cmpxchg(ctx, i):
    a = ctx.accumulator
    b = operand.get(ctx, i, 0)
    c = operand.get(ctx, i, 1)

    if b.size != a.size:
        prev_a = a
        a = ctx.tmp(b.size)
        ctx.emit(  str_  (prev_a, a))

    tmp0 = ctx.tmp(8)

    ctx.emit(  equ_  (a, b, tmp0))
    ctx.emit(  jcc_  (tmp0, 'equal'))

    ctx.emit('not-equal')
    ctx.emit(  str_  (c, ctx.accumulator))
    ctx.emit(  str_  (imm(0, 8), r('zf', 8)))
    ctx.emit(  jcc_  (imm(1, 8), 'done'))

    ctx.emit('equal')
    operand.set(ctx, i, 0, c)
    ctx.emit(  str_  (imm(1, 8), r('zf', 8)))

    ctx.emit('done')
    ctx.emit(  nop_())
开发者ID:c01db33f,项目名称:reil,代码行数:26,代码来源:misc.py


示例5: x86_bextr

def x86_bextr(ctx, i):
    a = operand.get(ctx, i, 1)
    b = operand.get(ctx, i, 2)

    start = ctx.tmp(8)
    length = ctx.tmp(8)
    mask = ctx.tmp(a.size)
    tmp0 = ctx.tmp(8)
    result = ctx.tmp(a.size)

    ctx.emit(  str_  (b, start))
    ctx.emit(  lshr_ (b, imm(8, 8), length))
    # we are masking off [11111[start + length , start]111111]
    ctx.emit(  sub_  (imm(a.size, a.size), length, tmp0))
    ctx.emit(  lshr_ (imm(mask(a.size), a.size), tmp0, mask))
    #                    [[start + length, start]111111]
    ctx.emit(  add_  (tmp0, start, tmp0))
    ctx.emit(  lshl_ (mask, tmp0, mask))
    #                    [000000000000[start + length, start]]
    ctx.emit(  lshr_ (mask, start, mask))
    # we have our mask   [00000[start + length , start]000000]
    ctx.emit(  and_  (a, mask, result))
    ctx.emit(  lshr_ (result, start, result))

    set_zf(ctx, result)

    ctx.emit(  str_  (imm(0, 8), r('cf', 8)))
    ctx.emit(  undef_(r('af', 8)))
    ctx.emit(  undef_(r('sf', 8)))
    ctx.emit(  undef_(r('pf', 8)))

    operand.set(ctx, i, 0, result)
开发者ID:c01db33f,项目名称:reil,代码行数:32,代码来源:bitwise.py


示例6: x86_shrd

def x86_shrd(ctx, i):
    a = operand.get(ctx, i, 0)
    b = operand.get(ctx, i, 1)

    if len(i.operands) == 2:
        c = ctx.counter
    else:
        c = operand.get(ctx, i, 2)

    size = a.size
    max_shift = size - 1

    tmp0 = ctx.tmp(size)
    tmp1 = ctx.tmp(size * 2)
    result = ctx.tmp(size)

    # the shift amount is truncated at word_size - 1
    ctx.emit(  and_  (c, imm(max_shift, size), tmp0))

    # make a register double the size of the operands containing b a
    ctx.emit(  str_  (b, tmp1))
    ctx.emit(  lshl_ (tmp1, imm(size // 8, 8), tmp1))
    ctx.emit(  or_   (tmp1, a, tmp1))

    # now shift right by the desired amount
    ctx.emit(  lshr_ (tmp1, tmp0, tmp1))

    # and truncate into result
    ctx.emit(  str_  (tmp1, result))

    # TODO: flags properly

    _shift_set_flags(ctx, result)

    operand.set(ctx, i, 0, result)
开发者ID:c01db33f,项目名称:reil,代码行数:35,代码来源:bitwise.py


示例7: x86_imul

def x86_imul(ctx, i):
    if len(i.operands) == 1:
        # single operand form
        ctx.emit(  unkn_())

    elif len(i.operands) == 2:
        # double operand form
        a = operand.get(ctx, i, 0)
        b = operand.get(ctx, i, 1)

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

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

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

        _imul_set_flags(ctx, result)

    else:
        # triple operand form
        a = operand.get(ctx, i, 1)
        b = operand.get(ctx, i, 2)

        if b.size < a.size:
            prev_b = b
            b = ctx.tmp(a.size)
            ctx.emit(  sex_  (prev_b, b))

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

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

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

        _imul_set_flags(ctx, result)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:35,代码来源:arithmetic.py


示例8: x86_pshufd

def x86_pshufd(ctx, i):
    src = operand.get(ctx, i, 1)
    order = operand.get(ctx, i, 2)

    value = imm(0, 128)

    for j in range(0, 4):

        prev_order = order
        order = ctx.tmp(8)
        prev_value = value
        value = ctx.tmp(128)

        tmp0 = ctx.tmp(128)
        tmp1 = ctx.tmp(8)
        tmp2 = ctx.tmp(32)
        tmp3 = ctx.tmp(128)
        tmp4 = ctx.tmp(32)
        tmp5 = ctx.tmp(128)
        tmp6 = ctx.tmp(128)

        ctx.emit(  lshr_ (prev_order, imm(2, 8), order))
        ctx.emit(  and_  (prev_order, imm(0b00000011, 8), tmp1))
        ctx.emit(  mul_  (tmp1, imm(32, 32), tmp2))
        ctx.emit(  lshr_ (src, tmp2, tmp3))
        ctx.emit(  str_  (tmp3, tmp4))
        ctx.emit(  str_  (tmp4, tmp5))
        ctx.emit(  lshl_ (tmp5, imm(j * 32, 8), tmp6))
        ctx.emit(  add_  (tmp6, prev_value, value))

    operand.set(ctx, i, 0, value)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:31,代码来源:sse.py


示例9: x86_bswap

def x86_bswap(ctx, i):
    a = operand.get(ctx, i, 0)

    bytes = unpack(ctx, a, 8)
    bytes.reverse()
    value = pack(ctx, bytes)

    operand.set(ctx, i, 0, value)
开发者ID:c01db33f,项目名称:reil,代码行数:8,代码来源:misc.py


示例10: x86_pcmpgt

def x86_pcmpgt(ctx, i, size):
    a_id, b_id, dst_id = vex_opnds(i)

    a = operand.get(ctx, i, a_id)
    b = operand.get(ctx, i, b_id)

    a_parts = unpack(ctx, a, size)
    b_parts = unpack(ctx, b, size)

    a_sign = ctx.tmp(size)
    a_abs = ctx.tmp(size)
    b_sign = ctx.tmp(size)
    b_abs = ctx.tmp(size)

    tmp0 = ctx.tmp(size * 2)
    a_abs_lt_b_abs = ctx.tmp(8)
    tmp1 = ctx.tmp(size)
    a_b_same_sign = ctx.tmp(8)
    a_neg = ctx.tmp(8)
    b_nonneg = ctx.tmp(8)
    a_neg_and_b_nonneg = ctx.tmp(8)
    cond = ctx.tmp(8)

    dst_parts = []
    for a_part, b_part in zip(a_parts, b_parts):
        dst_part = ctx.tmp(size)

        ctx.emit(  and_  (a_part, imm(sign_bit(size), size), a_sign))
        ctx.emit(  and_  (a_part, imm(~sign_bit(size), size), a_abs))
        ctx.emit(  and_  (b_part, imm(sign_bit(size), size), b_sign))
        ctx.emit(  and_  (b_part, imm(~sign_bit(size), size), b_abs))

        # a < b <==> (|a| < |b| and sign(a) == sign(b)) or (a < 0 and b >= 0)

        # |a| < |b|
        ctx.emit(  sub_  (a_abs, b_abs, tmp0))
        ctx.emit(  and_  (tmp0, imm(sign_bit(size * 2), size * 2), tmp0))
        ctx.emit(  bisz_ (tmp0, a_abs_lt_b_abs))

        # sign(a) == sign(b)
        ctx.emit(  xor_  (a_sign, b_sign, tmp1))
        ctx.emit(  bisz_ (tmp1, a_b_same_sign))

        # a < 0 and b >= 0
        ctx.emit(  bisnz_(a_sign, a_neg))
        ctx.emit(  bisz_ (b_sign, b_nonneg))
        ctx.emit(  and_  (a_neg, b_nonneg, a_neg_and_b_nonneg))

        ctx.emit(  and_  (a_abs_lt_b_abs, a_b_same_sign, cond))
        ctx.emit(  or_   (cond, a_neg_and_b_nonneg, cond))
        ctx.emit(  mul_  (cond, imm(mask(size), size), dst_part))

        dst_parts.append(dst_part)


    value = pack(ctx, dst_parts)

    operand.set(ctx, i, dst_id, value)
开发者ID:c01db33f,项目名称:reil,代码行数:58,代码来源:sse.py


示例11: x86_rol

def x86_rol(ctx, i):
    a = operand.get(ctx, i, 0)
    b = operand.get(ctx, i, 1)

    max_shift = a.size-1

    size = a.size
    tmp0 = ctx.tmp(size)
    tmp1 = ctx.tmp(8)
    tmp2 = ctx.tmp(size * 2)
    tmp3 = ctx.tmp(size * 2)
    tmp4 = ctx.tmp(size)
    tmp5 = ctx.tmp(size * 2)
    tmp6 = ctx.tmp(size * 2)
    tmp7 = ctx.tmp(size)
    tmp8 = ctx.tmp(size)
    result = ctx.tmp(size)

    # the rotate amount is truncated at word_size - 1
    ctx.emit(  and_  (b, imm(max_shift, size), tmp0))

    # zero rotate doesn't affect flags
    ctx.emit(  bisz_ (tmp0, tmp1))
    ctx.emit(  jcc_  (tmp1, 'zero_rotate'))

    # zero extend
    ctx.emit(  str_  (a, tmp2))

    # left shift by the correct amount
    ctx.emit(  lshl_ (tmp2, tmp0, tmp3))

    # truncate to get first half of result
    ctx.emit(  str_  (tmp3, tmp4))

    # shift out then truncate to get second half of result
    ctx.emit(  lshr_ (tmp3, imm(max_shift+1, size * 2), tmp5))
    ctx.emit(  str_  (tmp5, tmp6))

    # or both halves of the result
    ctx.emit(  or_   (tmp4, tmp6, result))

    # compute carry flag (last bit that was shifted across)
    ctx.emit(  and_  (result, imm(1, size), tmp7))
    ctx.emit(  bisnz_(tmp7, r('cf', 8)))

    if isinstance(b, reil.ImmediateOperand) and b.value == 1:
        # overflow flag is msb of input ^ msb output
        tmp9 = ctx.tmp(size)
        ctx.emit(  and_  (a, imm(sign_bit(size), size), tmp8))
        ctx.emit(  xor_  (tmp8, tmp7, tmp8))
        ctx.emit(  bisnz_(tmp8, r('of', 8)))
    else:
        ctx.emit(  undef_(r('of', 8)))

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

    ctx.emit(  'zero_rotate')
    ctx.emit(  nop_())
开发者ID:c01db33f,项目名称:reil,代码行数:58,代码来源:bitwise.py


示例12: x86_movlpd

def x86_movlpd(ctx, i):
    a = operand.get(ctx, i, 0)
    value = operand.get(ctx, i, 1)
    tmp0 = ctx.tmp(a.size)
    tmp1 = ctx.tmp(a.size)
    ctx.emit(  and_  (a, imm(0xffffffffffffffff0000000000000000, 128), tmp0))
    ctx.emit(  or_   (tmp0, value, tmp0))

    operand.set(ctx, i, 0, tmp0)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:9,代码来源:sse.py


示例13: x86_not

def x86_not(ctx, i):
    a = operand.get(ctx, i, 0)

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

    ctx.emit(  xor_  (a, imm(mask(size), size), result))

    operand.set(ctx, i, 0, result)
开发者ID:c01db33f,项目名称:reil,代码行数:9,代码来源:logic.py


示例14: x86_shl

def x86_shl(ctx, i):
    a = operand.get(ctx, i, 0)

    if len(i.operands) == 1:
        if i.mnemonic.endswith('1'):
            b = imm(1, a.size)
        else:
            b = ctx.counter
    else:
        b = operand.get(ctx, i, 1)

    max_shift = a.size-1

    size = a.size
    tmp0 = ctx.tmp(size)
    tmp1 = ctx.tmp(size * 2)
    tmp2 = ctx.tmp(size * 2)
    tmp3 = ctx.tmp(size * 2)
    tmp4 = ctx.tmp(8)
    tmp5 = ctx.tmp(size)
    tmp6 = ctx.tmp(8)
    result = ctx.tmp(size)

    ctx.emit(  and_  (b, imm(max_shift, size), tmp0))

    # zero extend
    ctx.emit(  str_  (a, tmp1))

    # left shift by the correct amount
    ctx.emit(  lshl_ (tmp1, tmp0, tmp2))

    # truncate to get result
    ctx.emit(  str_  (tmp2, result))

    # compute carry flag
    ctx.emit(  and_  (tmp2, imm(carry_bit(size), size * 2), tmp3))
    ctx.emit(  bisnz_(tmp3, r('cf', 8)))

    ctx.emit(  equ_  (tmp0, imm(1, size), tmp4))
    ctx.emit(  bisz_ (tmp4, tmp4))
    ctx.emit(  jcc_  (tmp4, 'no_overflow_flag'))

    # compute overflow flag
    ctx.emit(  and_  (result, imm(sign_bit(size), size), tmp5))
    ctx.emit(  bisz_ (tmp5, tmp6))
    ctx.emit(  equ_  (r('cf', 8), tmp6, r('of', 8)))
    ctx.emit(  jcc_  (imm(1, 8), 'overflow_flag_done'))

    ctx.emit('no_overflow_flag')
    ctx.emit(  str_  (imm(0, 8), r('of', 8)))

    ctx.emit('overflow_flag_done')

    _shift_set_flags(ctx, result)

    operand.set(ctx, i, 0, result)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:56,代码来源:bitwise.py


示例15: x86_pxor

def x86_pxor(ctx, i):
    a = operand.get(ctx, i, 0)
    b = operand.get(ctx, i, 1)

    size = min(a.size, b.size)
    value = ctx.tmp(size)

    ctx.emit(  xor_  (a, b, value))

    operand.set(ctx, i, 0, value)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:10,代码来源:sse.py


示例16: x86_neg

def x86_neg(ctx, i):
    a = operand.get(ctx, i, 0)

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

    ctx.emit(  sub_  (imm(0, a.size), a, result))

    _sub_set_flags(ctx, imm(0, a.size), a,  result)

    operand.set(ctx, i, 0, result)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:10,代码来源:arithmetic.py


示例17: x86_xchg

def x86_xchg(ctx, i):
    a = operand.get(ctx, i, 0)
    b = operand.get(ctx, i, 1)

    tmp0 = ctx.tmp(a.size)

    ctx.emit(  str_  (a, tmp0))

    operand.set(ctx, i, 0, b)
    operand.set(ctx, i, 1, tmp0)
开发者ID:c01db33f,项目名称:reil,代码行数:10,代码来源:misc.py


示例18: x86_movzx

def x86_movzx(ctx, i):
    value = None

    if len(i.operands) == 1:
        # source is the accumulator
        value = ctx.accumulator
    else:
        value = operand.get(ctx, i, 1)

    operand.set(ctx, i, 0, value, clear=True, sign_extend=False)
开发者ID:c01db33f,项目名称:reil,代码行数:10,代码来源:memory.py


示例19: x86_pop

def x86_pop(ctx, i):
    a = operand.get(ctx, i, 0)
    value = ctx.tmp(a.size)

    ctx.emit(  ldm_  (ctx.stack_ptr, value))
    ctx.emit(  add_  (ctx.stack_ptr,
                      imm(value.size // 8, ctx.word_size),
                      ctx.stack_ptr))

    operand.set(ctx, i, 0, value)
开发者ID:acutebridge,项目名称:pyreil,代码行数:10,代码来源:memory.py


示例20: x86_inc

def x86_inc(ctx, i):
    a = operand.get(ctx, i, 0)

    b = imm(1, a.size)
    result = ctx.tmp(a.size * 2)

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

    _add_set_flags(ctx, a, b, result, cf=False)

    operand.set(ctx, i, 0, result)
开发者ID:joxeankoret,项目名称:pyreil,代码行数:11,代码来源:arithmetic.py



注:本文中的reil.x86.operand.set函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python logger.error函数代码示例发布时间:2022-05-26
下一篇:
Python operand.get函数代码示例发布时间:2022-05-26
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap