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
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