Пример #1
0
def bpf_ld_(obj, sz, md, jt, jf, k):
    if sz == 3:
        raise InstructionError(obj)
    size = 32 >> sz
    dst = env.A
    adr = env.skb()
    if md == 0:  # IMM
        src = env.cst(k.int(-1), 32)
    elif md == 1:  # ABS
        src = env.mem(adr, size, disp=k.int(-1))
    elif md == 2:  # IND
        src = env.mem(adr + env.X + k.int(-1), size)
    elif md == 3 and k.int() < 16:  # MEM
        src = env.M[k.int()]
    elif md == 4:  # LEN
        src = env.skb("len")
    else:
        raise InstructionError(obj)
    obj.operands = [dst, src]
    obj.type = type_data_processing
Пример #2
0
def bpf_ldx_(obj,sz,md,jt,jf,k):
    if sz==3: raise InstructionError(obj)
    size = 32>>sz
    dst = env.X
    adr = env.skb()
    if   md==0 and size==32: #IMM
        src = env.cst(k.int(-1),32)
    elif md==3 and size==32 and k.int()<16: #MEM
        src = env.M[k.int()]
    elif md==6 and size==8: #MSH
        src = env.mem(adr,size,disp=k.int(-1))*4
    else:
        raise InstructionError(obj)
    obj.operands = [dst,src]
    obj.type = type_data_processing