This commit is contained in:
Dimitri Papadopoulos Orfanos 2026-03-28 17:56:09 +00:00 committed by GitHub
commit 87caa9ce26
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 193 additions and 188 deletions

View file

@ -54,7 +54,7 @@ def intra_block_flow_symb(lifter, _, flow_graph, irblock, in_nodes, out_nodes):
node_n_r = current_nodes[n_r]
else:
node_n_r = get_node_name(irblock.loc_key, i, n_r)
if not n_r in in_nodes:
if n_r not in in_nodes:
in_nodes[n_r] = node_n_r
flow_graph.add_uniq_edge(node_n_r, node_n_w)
@ -68,7 +68,7 @@ def intra_block_flow_symb(lifter, _, flow_graph, irblock, in_nodes, out_nodes):
node_n_r = current_nodes[n_r]
else:
node_n_r = get_node_name(irblock.loc_key, 0, n_r)
if not n_r in in_nodes:
if n_r not in in_nodes:
in_nodes[n_r] = node_n_r
flow_graph.add_node(node_n_r)

View file

@ -140,7 +140,7 @@ class GraphMiasmIR(idaapi.GraphViewer):
for dst in all_dst:
if not dst.is_loc():
continue
if not dst.loc_key in self.ircfg.blocks:
if dst.loc_key not in self.ircfg.blocks:
continue
node1 = addr_id[loc_key]
node2 = addr_id[dst.loc_key]

View file

@ -51,7 +51,7 @@ def guess_machine(addr=None):
is_bigendian = info.is_be()
infos = (is_armt, size, is_bigendian)
if not infos in info2machine:
if infos not in info2machine:
raise NotImplementedError('not fully functional')
machine = Machine(info2machine[infos])

View file

@ -34,7 +34,7 @@ def intra_block_flow_raw(lifter, ircfg, flow_graph, irb, in_nodes, out_nodes):
for n in all_mems:
node_n_w = get_node_name(irb.loc_key, i, n)
if not n in nodes_r:
if n not in nodes_r:
continue
o_r = n.ptr.get_r(mem_read=False, cst_read=True)
for n_r in o_r:
@ -71,13 +71,13 @@ def inter_block_flow_link(lifter, ircfg, flow_graph, irb_in_nodes, irb_out_nodes
current_nodes = dict(current_nodes)
# link current nodes to block in_nodes
if not lbl in ircfg.blocks:
if lbl not in ircfg.blocks:
print("cannot find block!!", lbl)
return set()
irb = ircfg.blocks[lbl]
to_del = set()
for n_r, node_n_r in viewitems(irb_in_nodes[irb.loc_key]):
if not n_r in current_nodes:
if n_r not in current_nodes:
continue
flow_graph.add_uniq_edge(current_nodes[n_r], node_n_r)
to_del.add(n_r)
@ -86,7 +86,7 @@ def inter_block_flow_link(lifter, ircfg, flow_graph, irb_in_nodes, irb_out_nodes
if link_exec_to_data:
for n_x_r in exec_nodes:
for n_r, node_n_r in viewitems(irb_in_nodes[irb.loc_key]):
if not n_x_r in current_nodes:
if n_x_r not in current_nodes:
continue
if isinstance(n_r, ExprInt):
continue
@ -115,7 +115,7 @@ def create_implicit_flow(lifter, flow_graph, irb_in_nodes, irb_out_nodes):
lbl = todo.pop()
irb = lifter.blocks[lbl]
for lbl_son in lifter.graph.successors(irb.loc_key):
if not lbl_son in lifter.blocks:
if lbl_son not in lifter.blocks:
print("cannot find block!!", lbl)
continue
irb_son = lifter.blocks[lbl_son]
@ -127,7 +127,7 @@ def create_implicit_flow(lifter, flow_graph, irb_in_nodes, irb_out_nodes):
node_n_w = irb.loc_key, len(irb), n_r
irb_out_nodes[irb.loc_key][n_r] = node_n_w
if not n_r in irb_in_nodes[irb.loc_key]:
if n_r not in irb_in_nodes[irb.loc_key]:
irb_in_nodes[irb.loc_key][n_r] = irb.loc_key, 0, n_r
node_n_r = irb_in_nodes[irb.loc_key][n_r]
for lbl_p in lifter.graph.predecessors(irb.loc_key):

View file

@ -57,7 +57,7 @@ def expr_range(expr):
return - expr_range(expr.args[0])
elif expr.op == "%":
assert len(expr.args) == 2
op, mod = [expr_range(arg) for arg in expr.args]
op, mod = (expr_range(arg) for arg in expr.args)
if mod.intervals.length == 1:
# Modulo intervals is not supported
return op % mod.intervals.hull()[0]

View file

@ -600,9 +600,9 @@ class aarch64_gpreg_noarg(reg_noarg):
def encode(self):
if not test_set_sf(self.parent, self.expr.size):
return False
if not self.expr.size in self.gpregs_info:
if self.expr.size not in self.gpregs_info:
return False
if not self.expr in self.gpregs_info[self.expr.size].expr:
if self.expr not in self.gpregs_info[self.expr.size].expr:
return False
self.value = self.gpregs_info[self.expr.size].expr.index(self.expr)
return True
@ -621,9 +621,9 @@ class aarch64_gpreg_noarg_nosp(aarch64_gpreg_noarg):
def encode(self):
if not test_set_sf(self.parent, self.expr.size):
return False
if not self.expr.size in self.gpregs_info:
if self.expr.size not in self.gpregs_info:
return False
if not self.expr in self.gpregs_info[self.expr.size].expr:
if self.expr not in self.gpregs_info[self.expr.size].expr:
return False
if self.expr not in self.gpregs_info[self.expr.size].expr:
return False
@ -643,9 +643,9 @@ class aarch64_simdreg(reg_noarg, aarch64_arg):
return True
def encode(self):
if not self.expr.size in self.simd_size:
if self.expr.size not in self.simd_size:
return False
if not self.expr in simds_info[self.expr.size].expr:
if self.expr not in simds_info[self.expr.size].expr:
return False
self.value = simds_info[self.expr.size].expr.index(self.expr)
self.parent.size.value = self.simd_size.index(self.expr.size)
@ -692,7 +692,7 @@ class aarch64_gpreg_isf(reg_noarg, aarch64_arg):
return True
def encode(self):
if not self.expr in gpregs_info[self.expr.size].expr:
if self.expr not in gpregs_info[self.expr.size].expr:
return False
self.value = gpregs_info[self.expr.size].expr.index(self.expr)
self.parent.sf.value = 1 if self.expr.size == 32 else 0
@ -738,11 +738,11 @@ class aarch64_gpreg0(bsi, aarch64_arg):
self.value = 0x1F
return True
return False
if not self.expr.size in self.gpregs_info:
if self.expr.size not in self.gpregs_info:
return False
if not test_set_sf(self.parent, self.expr.size):
return False
if not self.expr in self.gpregs_info[self.expr.size].expr:
if self.expr not in self.gpregs_info[self.expr.size].expr:
return False
self.value = self.gpregs_info[self.expr.size].expr.index(self.expr)
return True
@ -969,7 +969,7 @@ class aarch64_gpreg_ext(reg_noarg, aarch64_arg):
return False
reg, amount = self.expr.args
if not reg in gpregsz_info[self.expr.size].expr:
if reg not in gpregsz_info[self.expr.size].expr:
return False
self.value = gpregsz_info[self.expr.size].expr.index(reg)
option = extend_lst.index(self.expr.op)
@ -1021,7 +1021,7 @@ class aarch64_gpreg_ext2(reg_noarg, aarch64_arg):
return True
if not (isinstance(self.expr, m2_expr.ExprOp) and self.expr.op == 'segm'):
return False
if not arg0 in self.parent.rn.reg_info.expr:
if arg0 not in self.parent.rn.reg_info.expr:
return False
self.parent.rn.value = self.parent.rn.reg_info.expr.index(arg0)
is_reg = False
@ -1088,7 +1088,7 @@ class aarch64_gpreg_ext2_128(aarch64_gpreg_ext2):
def test_set_sf(parent, size):
if not hasattr(parent, 'sf'):
return False
if parent.sf.value == None:
if parent.sf.value is None:
parent.sf.value = 1 if size == 64 else 0
return True
psize = 64 if parent.sf.value else 32
@ -1104,9 +1104,9 @@ class aarch64_gpreg_sftimm(reg_noarg, aarch64_arg):
if not test_set_sf(self.parent, size):
return False
if isinstance(self.expr, m2_expr.ExprId):
if not size in gpregs_info:
if size not in gpregs_info:
return False
if not self.expr in self.reg_info[size].expr:
if self.expr not in self.reg_info[size].expr:
return False
self.parent.shift.value = 0
self.parent.imm.value = 0
@ -1115,10 +1115,10 @@ class aarch64_gpreg_sftimm(reg_noarg, aarch64_arg):
if not isinstance(self.expr, m2_expr.ExprOp):
return False
if not self.expr.op in shift_expr:
if self.expr.op not in shift_expr:
return False
args = self.expr.args
if not args[0] in self.reg_info[size].expr:
if args[0] not in self.reg_info[size].expr:
return False
if not isinstance(args[1], m2_expr.ExprInt):
return False
@ -1483,7 +1483,7 @@ class aarch64_imm_hw_sc(aarch64_arg):
return False
if set_imm_to_size(self.parent.args[0].expr.size, self.expr.args[1]) is None:
return False
arg, amount = [int(arg) for arg in self.expr.args]
arg, amount = (int(arg) for arg in self.expr.args)
if arg > 0xFFFF:
return False
if amount % 16 or amount // 16 > 4:
@ -1599,7 +1599,7 @@ class aarch64_deref(aarch64_arg):
expr = self.expr
if not isinstance(expr, m2_expr.ExprOp):
return False
if not expr.op in ['postinc', 'preinc_wb', 'preinc']:
if expr.op not in ['postinc', 'preinc_wb', 'preinc']:
return False
if hasattr(self.parent, "postpre"):
if expr.op == 'postinc':
@ -1609,7 +1609,7 @@ class aarch64_deref(aarch64_arg):
if len(expr.args) != 2:
return False
reg, off = expr.args
if not reg in gpregs64_info.expr:
if reg not in gpregs64_info.expr:
return False
if not isinstance(off, m2_expr.ExprInt):
return False
@ -1664,7 +1664,7 @@ class aarch64_deref_nooff(aarch64_deref):
else:
return False
if not reg in gpregs64_info.expr:
if reg not in gpregs64_info.expr:
return False
self.value = gpregs64_info.expr.index(reg)
return True
@ -1679,7 +1679,7 @@ class aarch64_sf_scale(aarch64_deref):
def encode_w_size(self, off):
size = self.parent.args[0].expr.size
if not size in self.size2scale:
if size not in self.size2scale:
return False
scale = self.size2scale[size]
off = int(mod_size2int[size](off) >> scale)

View file

@ -2279,7 +2279,7 @@ mnemo_func.update({
def get_mnemo_expr(ir, instr, *args):
if not instr.name.lower() in mnemo_func:
if instr.name.lower() not in mnemo_func:
raise NotImplementedError('unknown mnemo %s' % instr)
instr, extra_ir = mnemo_func[instr.name.lower()](ir, instr, *args)
return instr, extra_ir

View file

@ -1687,7 +1687,7 @@ class arm_mem_rn_imm(arm_arg):
len(ptr.args) == 2 and
ptr.op == 'preinc'):
reg, imm = ptr.args
if not reg in gpregs.expr:
if reg not in gpregs.expr:
return False
self.value = gpregs.expr.index(reg)
if not isinstance(imm, ExprInt):
@ -1771,7 +1771,7 @@ class armt_barrier_option(reg_noarg, arm_arg):
return True
def encode(self):
if not self.expr in self.reg_info.dct_expr_inv:
if self.expr not in self.reg_info.dct_expr_inv:
log.debug("cannot encode reg %r", self.expr)
return False
self.value = self.reg_info.dct_expr_inv[self.expr]
@ -1870,7 +1870,7 @@ class arm_rm_rot2(arm_arg):
if not isinstance(value, ExprInt):
return False
value = int(value)
if not value in [8, 16, 24]:
if value not in [8, 16, 24]:
return False
self.parent.rot2.value = value // 8
return True
@ -2398,7 +2398,7 @@ class armt_reg_wb(arm_reg_wb):
def decode(self, v):
v = v & self.lmask
e = self.reg_info.expr[v]
if not e in self.parent.trlist.expr.args:
if e not in self.parent.trlist.expr.args:
e = ExprOp('wback', e)
self.expr = e
return True
@ -3002,7 +3002,7 @@ class armt_imm5_1(arm_imm):
return True
aif_str = ["X", "F", "I", "IF", "A", "AF", "AI", "AIF"]
aif_expr = [ExprId(x, 32) if x != None else None for x in aif_str]
aif_expr = [ExprId(x, 32) if x is not None else None for x in aif_str]
aif_reg = reg_info(aif_str, aif_expr)

View file

@ -22,9 +22,9 @@ def cb_arm_fix_call(mdis, cur_block, offsets_to_dis):
return
values = viewvalues(mdis.arch.pc)
if not l1.args[0] in values:
if l1.args[0] not in values:
return
if not l2.args[1] in values:
if l2.args[1] not in values:
return
loc_key_cst = mdis.loc_db.get_or_create_offset_location(l1.offset + 4)
cur_block.add_cst(loc_key_cst, AsmConstraint.c_next)

View file

@ -1835,7 +1835,7 @@ def is_pc_written(ir, instr_ir):
def add_condition_expr(ir, instr, cond, instr_ir, extra_ir):
if cond == COND_AL:
return instr_ir, extra_ir
if not cond in tab_cond:
if cond not in tab_cond:
raise ValueError('unknown condition %r' % cond)
cond = tab_cond[cond]
@ -2050,7 +2050,7 @@ def split_expr_dst(ir, instr_ir):
def get_mnemo_expr(ir, instr, *args):
if not instr.name.lower() in mnemo_func_cond:
if instr.name.lower() not in mnemo_func_cond:
raise ValueError('unknown mnemo %s' % instr)
cond, mf = mnemo_func_cond[instr.name.lower()]
instr_ir, extra_ir = mf(ir, instr, *args)

View file

@ -492,7 +492,7 @@ class mips32_cpr(mips32_arg):
return True
def encode(self):
e = self.expr
if not e in regs.regs_cpr0_expr:
if e not in regs.regs_cpr0_expr:
return False
index = regs.regs_cpr0_expr.index(e)
self.value = index & 7

View file

@ -480,7 +480,7 @@ def ppc_bo_bi_to_mnemo(bo, bi, prefer_taken=True, default_taken=True):
bi2cond = { 0b00: 'LT', 0b01: 'GT', 0b10: 'EQ', 0b11: 'SO' }
bi2ncond = { 0b00: 'GE', 0b01: 'LE', 0b10: 'NE', 0b11: 'NS' }
n = bo & 0b11110
if not n in bo2mnemo:
if n not in bo2mnemo:
raise NotImplementedError("Unknown BO field")
mnem = 'B' + bo2mnemo[n]
if mnem[-1] == 'T':

View file

@ -63,7 +63,7 @@ def mn_compute_flags(rvalue, overflow_expr=None):
ExprInt(0, 1)) & ~rvalue.msb())))
ret.append(ExprAssign(CR0_EQ, ExprCond(rvalue, ExprInt(0, 1),
ExprInt(1, 1))))
if overflow_expr != None:
if overflow_expr is not None:
ret.append(ExprAssign(CR0_SO, XER_SO | overflow_expr))
else:
ret.append(ExprAssign(CR0_SO, XER_SO))

View file

@ -219,7 +219,7 @@ class sh4_dgpregpinc(sh4_arg):
if not res:
return False
r = res[jra]
if not r in gpregs.expr:
if r not in gpregs.expr:
return False
v = gpregs.expr.index(r)
self.value = v
@ -262,7 +262,7 @@ class sh4_dgpreg_imm(sh4_dgpreg):
return False
d = int(res[jrb])
p.disp.value = d // (s // 8)
if not res[jra] in gpregs.expr:
if res[jra] not in gpregs.expr:
return False
v = gpregs.expr.index(res[jra])
else:
@ -580,7 +580,7 @@ class bs_dr0gp(sh4_dgpreg):
if not res:
return False
r = res[jra]
if not r in gpregs.expr:
if r not in gpregs.expr:
return False
self.value = gpregs.expr.index(r)
return True

View file

@ -1598,7 +1598,7 @@ def gen_modrm_form():
if sib_rez in [sib_s08_ebp, sib_u32_ebp, sib_u32]:
tmp = i
if not tmp in sib_rez[index]:
if tmp not in sib_rez[index]:
sib_rez[index][tmp] = 0 # 1 << ss
sib_rez[index][tmp] += 1 << ss
else:
@ -1607,7 +1607,7 @@ def gen_modrm_form():
tmp = i + 8 * rex_x
if i == 0b100 and rex_x == 0:
continue
if not tmp in sib_rez[rex_x][rex_b][index]:
if tmp not in sib_rez[rex_x][rex_b][index]:
sib_rez[rex_x][rex_b][index][tmp] = 0 # 1 << ss
sib_rez[rex_x][rex_b][index][tmp] += 1 << ss
@ -1865,7 +1865,7 @@ def expr2modrm(expr, parent, w8, sx=0, xmm=0, mm=0, bnd=0):
else:
size2reg = SIZE2XMMREG
selreg = size2reg[expr.size]
if not expr in selreg.expr:
if expr not in selreg.expr:
return None, None, False
i = selreg.expr.index(expr)
dct_expr[i] = 1
@ -1924,14 +1924,14 @@ def expr2modrm(expr, parent, w8, sx=0, xmm=0, mm=0, bnd=0):
parent.rex_p.value = 0
parent.rex_x.value = 0
r = size2gpregs[8]
if not expr in r.expr:
if expr not in r.expr:
return None, None, False
i = r.expr.index(expr)
dct_expr[i] = 1
return [dct_expr], None, True
if opmode != expr.size:
return None, None, False
if not expr in size2gpregs[opmode].expr:
if expr not in size2gpregs[opmode].expr:
return None, None, False
i = size2gpregs[opmode].expr.index(expr)
if i > 7:
@ -2014,7 +2014,7 @@ class x86_rm_arg(x86_arg):
p = self.parent
admode = p.v_admode()
if not admode in [16, 32, 64]:
if admode not in [16, 32, 64]:
raise ValueError('strange admode %r', admode)
v = setmodrm(p.mod.value, 0, p.rm.value)
v |= p.rex_b.value << 8
@ -2040,7 +2040,7 @@ class x86_rm_arg(x86_arg):
return self.expr is not None
def gen_cand(self, v_cand, admode):
if not admode in modrm2byte:
if admode not in modrm2byte:
# XXX TODO: 64bit
return
if not v_cand:
@ -2075,7 +2075,7 @@ class x86_rm_arg(x86_arg):
# We only need sort for determinism
v = tuple(sorted(viewitems(v), key=str))
admode = 64 if p.mode == 64 else admode
if not v in modrm2byte[admode]:
if v not in modrm2byte[admode]:
continue
xx = modrm2byte[admode][v]
@ -2273,7 +2273,7 @@ class x86_rm_sd(x86_rm_arg):
if isinstance(self.expr, ExprInt):
return
p = self.parent
if not self.expr.size in [32, 64]:
if self.expr.size not in [32, 64]:
return
self.set_s_value(0)
v_cand, segm, ok = expr2modrm(self.expr, p, 1)

View file

@ -898,7 +898,7 @@ def dec(_, instr, dst):
def push_gen(ir, instr, src, size):
e = []
if not size in [16, 32, 64]:
if size not in [16, 32, 64]:
raise ValueError('bad size stacker!')
if src.size < size:
src = src.zeroExtend(size)
@ -924,13 +924,13 @@ def pushw(ir, instr, src):
def pop_gen(ir, instr, src, size):
e = []
if not size in [16, 32, 64]:
if size not in [16, 32, 64]:
raise ValueError('bad size stacker!')
sp = mRSP[instr.mode]
new_sp = sp + m2_expr.ExprInt(src.size // 8, sp.size)
# Don't generate SP/ESP/RSP incrementation on POP SP/ESP/RSP
if not (src in mRSP.values()):
if src not in mRSP.values():
e.append(m2_expr.ExprAssign(sp, new_sp))
# XXX FIX XXX for pop [esp]
if isinstance(src, m2_expr.ExprMem):
@ -2088,7 +2088,7 @@ def movsd_dispatch(ir, instr, dst=None, src=None):
def float_prev(flt, popcount=1):
if not flt in float_list:
if flt not in float_list:
return None
i = float_list.index(flt)
if i < popcount:
@ -6017,7 +6017,7 @@ class Lifter_X86_16(Lifter):
args[i] = self.ExprMem(m2_expr.ExprOp('segm', my_ss,
a.ptr), a.size)
if not instr.name.lower() in mnemo_func:
if instr.name.lower() not in mnemo_func:
raise NotImplementedError(
"Mnemonic %s not implemented" % instr.name)
@ -6026,7 +6026,7 @@ class Lifter_X86_16(Lifter):
self.mod_pc(instr, instr_ir, extra_ir)
instr.additional_info.except_on_instr = False
if instr.additional_info.g1.value & 14 == 0 or \
not instr.name in repeat_mn:
instr.name not in repeat_mn:
return instr_ir, extra_ir
if instr.name == "MOVSD" and len(instr.args) == 2:
return instr_ir, extra_ir

View file

@ -461,7 +461,7 @@ class bs(object):
if cls:
for b in cls:
if 'flen' in b.__dict__:
flen = getattr(b, 'flen')
flen = b.flen
self.strbits = strbits
self.l = l
@ -734,7 +734,7 @@ class reg_noarg(object):
return True
def encode(self):
if not self.expr in self.reg_info.expr:
if self.expr not in self.reg_info.expr:
log.debug("cannot encode reg %r", self.expr)
return False
self.value = self.reg_info.expr.index(self.expr)
@ -890,10 +890,10 @@ def add_candidate_to_tree(tree, c):
continue
node = f.l, f.fmask, f.fbits, f.fname, f.flen
if not node in branch:
if node not in branch:
branch[node] = {}
branch = branch[node]
if not 'mn' in branch:
if 'mn' not in branch:
branch['mn'] = set()
branch['mn'].add(c)
@ -924,7 +924,7 @@ class metamn(type):
alias = dct.get('alias', False)
fields = bases[0].mod_fields(dct['fields'])
if not 'name' in dct:
if 'name' not in dct:
dct["name"] = bases[0].getmn(name)
if 'args' in dct:
# special case for permuted arguments
@ -1103,7 +1103,7 @@ class cls_mn(with_metaclass(metamn, object)):
offset_b += l
if v & fmask != fbits:
continue
if fname is not None and not fname in fname_values:
if fname is not None and fname not in fname_values:
fname_values[fname] = v
for nb, v in viewitems(vals):
if 'mn' in nb:
@ -1240,7 +1240,7 @@ class cls_mn(with_metaclass(metamn, object)):
bs_o.leave_atomic_mode()
raise
offset_b += l
if not f.fname in fname_values:
if f.fname not in fname_values:
fname_values[f.fname] = bv
todo[i] = bv
else:
@ -1306,7 +1306,7 @@ class cls_mn(with_metaclass(metamn, object)):
raise ValueError('cannot find name', text)
name = name[0]
if not name in cls.all_mn_name:
if name not in cls.all_mn_name:
raise ValueError('unknown name', name)
clist = [x for x in cls.all_mn_name[name]]
out = []

View file

@ -664,7 +664,7 @@ class CAstTypes(object):
"""Return the CTypeBase of the @ast
@ast: pycparser.c_ast instance"""
cls = ast.__class__
if not cls in self.ast_to_typeid_rules:
if cls not in self.ast_to_typeid_rules:
raise NotImplementedError("Strange type %r" % ast)
return self.ast_to_typeid_rules[cls](ast)
@ -746,7 +746,7 @@ class CAstTypes(object):
@ast: parsed pycparser.c_ast object
"""
cls = ast.__class__
if not cls in self.ast_parse_rules:
if cls not in self.ast_parse_rules:
raise NotImplementedError("Strange declaration %r" % cls)
return self.ast_parse_rules[cls](ast)

View file

@ -90,9 +90,9 @@ class DiGraph(object):
self.del_edge(node, succ)
def add_edge(self, src, dst):
if not src in self._nodes:
if src not in self._nodes:
self.add_node(src)
if not dst in self._nodes:
if dst not in self._nodes:
self.add_node(dst)
self._edges.append((src, dst))
self._nodes_succ[src].append(dst)
@ -115,7 +115,7 @@ class DiGraph(object):
self.del_edge(src, dst)
def predecessors_iter(self, node):
if not node in self._nodes_pred:
if node not in self._nodes_pred:
return
for n_pred in self._nodes_pred[node]:
yield n_pred
@ -124,7 +124,7 @@ class DiGraph(object):
return [x for x in self.predecessors_iter(node)]
def successors_iter(self, node):
if not node in self._nodes_succ:
if node not in self._nodes_succ:
return
for n_suc in self._nodes_succ[node]:
yield n_suc
@ -428,7 +428,7 @@ class DiGraph(object):
# Compute intersection of all predecessors'dominators
new_dom = None
for pred in prev_cb(node):
if not pred in nodes:
if pred not in nodes:
continue
if new_dom is None:
new_dom = set(dominators[pred])

View file

@ -1566,7 +1566,7 @@ class CTypesManager(object):
@size: CTypeOp or integer"""
if isinstance(size, CTypeOp):
assert len(size.args) == 2
arg0, arg1 = [self.size_to_int(arg) for arg in size.args]
arg0, arg1 = (self.size_to_int(arg) for arg in size.args)
if size.operator == "+":
return arg0 + arg1
elif size.operator == "-":

View file

@ -1698,7 +1698,7 @@ def test_set(expr, pattern, tks, result):
@result : dictionary of ExprId -> Expr, current context
"""
if not pattern in tks:
if pattern not in tks:
return expr == pattern
if pattern in result and result[pattern] != expr:
return False

View file

@ -400,7 +400,7 @@ def simp_cond_op_int(_, expr):
# x?a:b + x?c:d + e => x?(a+c+e:b+d+e)
if not expr.op in ["+", "|", "^", "&", "*", '<<', '>>', 'a>>']:
if expr.op not in ["+", "|", "^", "&", "*", '<<', '>>', 'a>>']:
return expr
if len(expr.args) < 2:
return expr
@ -428,7 +428,7 @@ def simp_cond_op_int(_, expr):
def simp_cond_factor(e_s, expr):
"Merge similar conditions"
if not expr.op in ["+", "|", "^", "&", "*", '<<', '>>', 'a>>']:
if expr.op not in ["+", "|", "^", "&", "*", '<<', '>>', 'a>>']:
return expr
if len(expr.args) < 2:
return expr
@ -448,7 +448,7 @@ def simp_cond_factor(e_s, expr):
not_conds.append(arg)
continue
cond = arg.cond
if not cond in conds:
if cond not in conds:
conds[cond] = []
else:
multi_cond = True

View file

@ -23,7 +23,7 @@ log.setLevel(logging.INFO)
def get_block(lifter, ircfg, mdis, addr):
"""Get IRBlock at address @addr"""
loc_key = ircfg.get_or_create_loc_key(addr)
if not loc_key in ircfg.blocks:
if loc_key not in ircfg.blocks:
offset = mdis.loc_db.get_location_offset(loc_key)
block = mdis.dis_block(offset)
lifter.add_asmblock_to_ircfg(block, ircfg)

View file

@ -159,7 +159,7 @@ class TranslatorZ3(Translator):
res = None
for arg in expr.args:
e = z3.Extract(arg.size-1, 0, self.from_expr(arg))
if res != None:
if res is not None:
res = z3.Concat(e, res)
else:
res = e

View file

@ -44,7 +44,7 @@ def get_pe_dependencies(pe_obj):
out.add(libname)
# If binary has redirected export, add dependencies
if pe_obj.DirExport.expdesc != None:
if pe_obj.DirExport.expdesc is not None:
addrs = get_export_name_addr_list(pe_obj)
for imp_ord_or_name, ad in addrs:
# if export is a redirection, search redirected dll
@ -501,7 +501,7 @@ class libimp_pe(libimp):
ad = found
else:
# import redirected lib from non loaded dll
if not exp_dname in self.name2off:
if exp_dname not in self.name2off:
self.created_redirected_imports.setdefault(
exp_dname, set()).add(name)
@ -631,7 +631,7 @@ def vm_load_pe_and_dependencies(vm, fname, name2module, runtime_lib,
print(name)
if pe_obj is None:
continue
if pe_obj.DirExport.expdesc == None:
if pe_obj.DirExport.expdesc is None:
continue
addrs = get_export_name_addr_list(pe_obj)
for imp_ord_or_name, ad in addrs:
@ -753,7 +753,7 @@ class ImpRecStateMachine(object):
return
self.cur_list.append(self.format_func_info(func_info, func_addr))
else:
self.state == self.STATE_SEARCH
self.state = self.STATE_SEARCH
elif self.state == self.STATE_END_FUNC_LIST:
self.seen.append(self.cur_list)
self.state = self.STATE_SEARCH

View file

@ -38,7 +38,7 @@ class libimp(object):
def lib_get_add_base(self, name):
assert isinstance(name, basestring)
name = name.lower().strip(' ')
if not "." in name:
if "." not in name:
log.warning('warning adding .dll to modulename')
name += '.dll'
log.warning(name)
@ -57,7 +57,7 @@ class libimp(object):
return ad
def lib_get_add_func(self, libad, imp_ord_or_name, dst_ad=None):
if not libad in viewvalues(self.name2off):
if libad not in viewvalues(self.name2off):
raise ValueError('unknown lib base!', hex(libad))
# test if not ordinatl
@ -66,7 +66,7 @@ class libimp(object):
# imp_ord_or_name = imp_ord_or_name[:imp_ord_or_name.find('\x00')]
#[!] can have multiple dst ad
if not imp_ord_or_name in self.lib_imp2dstad[libad]:
if imp_ord_or_name not in self.lib_imp2dstad[libad]:
self.lib_imp2dstad[libad][imp_ord_or_name] = set()
if dst_ad is not None:
self.lib_imp2dstad[libad][imp_ord_or_name].add(dst_ad)

View file

@ -27,7 +27,7 @@ def fix_size(fields, wsize):
pass
elif v == "ptr":
v = size2type[wsize]
elif not v in type_size:
elif v not in type_size:
raise ValueError("unknown Cstruct type", v)
else:
v = type_size[v]

View file

@ -235,7 +235,7 @@ class Section(with_metaclass(Section_metaclass, object)):
def get_infosection(self):
# XXX info may not be in sh list ?!?
if not self.sh.info in self.parent:
if self.sh.info not in self.parent:
return None
return self.parent[self.sh.info]
@ -406,7 +406,7 @@ class StrTable(Section):
def mod_name(self, name, new_name):
s = bytes(self.content)
name_b = b'\x00%s\x00' % name.encode()
if not name_b in s:
if name_b not in s:
raise ValueError('Unknown name %r' % name)
self.content = s.replace(
name_b,
@ -666,7 +666,7 @@ class virt(object):
self.parent = x
def get_rvaitem(self, start, stop=None):
if stop == None:
if stop is None:
s = self.parent.getsectionbyvad(start)
if s:
start = start - s.sh.addr
@ -725,7 +725,7 @@ class virt(object):
n_item = slice(n_item, n_item + 1, 1)
start = n_item.start + s.ph.offset
stop = n_item.stop + s.ph.offset
if n_item.step != None:
if n_item.step is not None:
step = n_item.step + s.ph.offset
else:
step = None

View file

@ -46,7 +46,7 @@ def fix_size(fields, wsize):
pass
elif v == "ptr":
v = size2type[wsize]
elif not v in type2realtype:
elif v not in type2realtype:
raise ValueError("unknown Cstruct type", v)
else:
v = type2realtype[v]
@ -177,7 +177,7 @@ class CStruct(with_metaclass(Cstruct_Metaclass, object)):
self._size = None
kargs = dict(kargs)
# if not sex or size: get the one of the parent
if _sex == None and _wsize == None:
if _sex is None and _wsize is None:
if parent_head:
_sex = parent_head._sex
_wsize = parent_head._wsize
@ -211,8 +211,8 @@ class CStruct(with_metaclass(Cstruct_Metaclass, object)):
if ffmt in type2realtype or (isinstance(ffmt, str) and re.match(r'\d+s', ffmt)):
# basic types
fmt = real_fmt(ffmt, self._wsize)
if cpt == None:
if value == None:
if cpt is None:
if value is None:
o = struct.calcsize(fmt) * b"\x00"
elif ffmt.endswith('s'):
new_value = force_bytes(value)
@ -222,7 +222,7 @@ class CStruct(with_metaclass(Cstruct_Metaclass, object)):
else:
o = b""
for v in value:
if value == None:
if value is None:
o += struct.calcsize(fmt) * b"\x00"
else:
o += struct.pack(self.sex + fmt, v)
@ -231,7 +231,7 @@ class CStruct(with_metaclass(Cstruct_Metaclass, object)):
o = value + b'\x00'
elif ffmt in all_cstructs:
# sub structures
if cpt == None:
if cpt is None:
o = bytes(value)
else:
o = b""

View file

@ -72,7 +72,7 @@ def get_optehdr_num(nthdr):
entry_size = 8
if parent.Coffhdr.sizeofoptionalheader < numberofrva * entry_size + len(parent.Opthdr):
numberofrva = (parent.Coffhdr.sizeofoptionalheader - len(parent.Opthdr)) // entry_size
log.warn('Bad number of rva.. using default %d' % numberofrva)
log.warning('Bad number of rva.. using default %d' % numberofrva)
numberofrva = 0x10
return numberofrva
@ -210,10 +210,10 @@ class SHList(CStruct):
return section
def align_sections(self, f_align=None, s_align=None):
if f_align == None:
if f_align is None:
f_align = self.parent_head.NThdr.filealignment
f_align = max(0x200, f_align)
if s_align == None:
if s_align is None:
s_align = self.parent_head.NThdr.sectionalignment
s_align = max(0x1000, s_align)
@ -295,12 +295,12 @@ class struct_array(object):
if not raw:
return
while (num == None) or (num and i < num):
while (num is None) or (num and i < num):
entry, length = cstr.unpack_l(raw, off,
target_class.parent_head,
target_class.parent_head._sex,
target_class.parent_head._wsize)
if num == None:
if num is None:
if raw[off:off + length] == b'\x00' * length:
self.end = b'\x00' * length
break
@ -532,9 +532,9 @@ class DirImport(CStruct):
if attr not in import_descriptor:
import_descriptor[attr] = 0
entry = ImpDesc_e(self.parent_head, **import_descriptor)
if entry.firstthunk != None:
if entry.firstthunk is not None:
of1 = entry.firstthunk
elif of1 == None:
elif of1 is None:
raise RuntimeError("set fthunk")
else:
entry.firstthunk = of1
@ -617,7 +617,7 @@ class DirImport(CStruct):
def get_funcvirt(self, dllname, funcname):
rva = self.get_funcrva(dllname, funcname)
if rva == None:
if rva is None:
return
return self.parent_head.rva2virt(rva)
@ -647,15 +647,15 @@ class DirExport(CStruct):
return None, off
off_sav = off
if off >= len(raw):
log.warn("export dir malformed!")
log.warning("export dir malformed!")
return None, off_o
expdesc = ExpDesc_e.unpack(raw,
off,
self.parent_head)
if self.parent_head.rva2off(expdesc.addressoffunctions) == None or \
self.parent_head.rva2off(expdesc.addressofnames) == None or \
self.parent_head.rva2off(expdesc.addressofordinals) == None:
log.warn("export dir malformed!")
if self.parent_head.rva2off(expdesc.addressoffunctions) is None or \
self.parent_head.rva2off(expdesc.addressofnames) is None or \
self.parent_head.rva2off(expdesc.addressofordinals) is None:
log.warning("export dir malformed!")
return None, off_o
self.dlldescname = DescName.unpack(raw, expdesc.name, self.parent_head)
try:
@ -669,7 +669,7 @@ class DirExport(CStruct):
expdesc.addressofordinals,
Ordinal, expdesc.numberofnames)
except RuntimeError:
log.warn("export dir malformed!")
log.warning("export dir malformed!")
return None, off_o
for func in self.f_names:
func.name = DescName.unpack(raw, func.rva, self.parent_head)
@ -697,7 +697,7 @@ class DirExport(CStruct):
names = [func.name for func in self.f_names]
names_ = names[:]
if names != names_:
log.warn("unsorted export names, may bug")
log.warning("unsorted export names, may bug")
def set_rva(self, rva, size=None):
rva_size = self.parent_head._wsize // 8
@ -791,7 +791,7 @@ class DirExport(CStruct):
names_s = names[:]
names_s.sort()
if names_s != names:
log.warn('tab names was not sorted may bug')
log.warning('tab names was not sorted may bug')
names.append(name)
names.sort()
index = names.index(name)
@ -831,7 +831,7 @@ class DirExport(CStruct):
def get_funcvirt(self, addr):
rva = self.get_funcrva(addr)
if rva == None:
if rva is None:
return
return self.parent_head.rva2virt(rva)
@ -861,7 +861,7 @@ class DirDelay(CStruct):
out = []
while off < ofend:
if off >= len(raw):
log.warn('warning bad reloc offset')
log.warning('warning bad reloc offset')
break
delaydesc, length = Delaydesc_e.unpack_l(raw,
@ -1030,13 +1030,13 @@ class DirDelay(CStruct):
for funcname in new_functions
]
for attr in ["attrs", "name", "hmod", "firstthunk", "originalfirstthunk", "boundiat", "unloadiat", "timestamp"]:
if not attr in import_descriptor:
if attr not in import_descriptor:
import_descriptor[attr] = 0
entry = Delaydesc_e(self.parent_head, **import_descriptor)
# entry.cstr.__dict__.update(import_descriptor)
if entry.firstthunk != None:
if entry.firstthunk is not None:
of1 = entry.firstthunk
elif of1 == None:
elif of1 is None:
raise RuntimeError("set fthunk")
else:
entry.firstthunk = of1
@ -1066,7 +1066,7 @@ class DirDelay(CStruct):
entry.originalfirstthunks.append(rva_ofirstt)
rva_func = Rva(self.parent_head)
if ibn != None:
if ibn is not None:
rva_func.rva = 0xDEADBEEF # default func addr
else:
# ord ?XXX?
@ -1114,7 +1114,7 @@ class DirDelay(CStruct):
def get_funcvirt(self, addr):
rva = self.get_funcrva(addr)
if rva == None:
if rva is None:
return
return self.parent_head.rva2virt(rva)
@ -1153,18 +1153,18 @@ class DirReloc(CStruct):
out = []
while off < ofend:
if off >= len(raw):
log.warn('warning bad reloc offset')
log.warning('warning bad reloc offset')
break
reldesc, length = Rel.unpack_l(raw,
off,
self.parent_head)
if reldesc.size == 0:
log.warn('warning null reldesc')
log.warning('warning null reldesc')
reldesc.size = length
break
of2 = off + length
if of2 + reldesc.size > len(self.parent_head.img_rva):
log.warn('relocation too big, skipping')
log.warning('relocation too big, skipping')
break
reldesc.rels = struct_array(self, raw,
of2,
@ -1330,7 +1330,7 @@ class DirRes(CStruct):
# data dir
off = entry.offsettodata
if not 0 <= off < len(raw):
log.warn('bad resource entry')
log.warning('bad resource entry')
continue
data = ResDataEntry.unpack(raw,
off,
@ -1341,10 +1341,10 @@ class DirRes(CStruct):
continue
# subdir
if off in dir_done:
log.warn('warning recusif subdir')
log.warning('warning recusif subdir')
continue
if not 0 <= off < len(self.parent_head.img_rva):
log.warn('bad resource entry')
log.warning('bad resource entry')
continue
subdir, length = ResDesc_e.unpack_l(raw,
off,
@ -1356,7 +1356,7 @@ class DirRes(CStruct):
ResEntry,
nbr)
except RuntimeError:
log.warn('bad resource entry')
log.warning('bad resource entry')
continue
entry.subdir = subdir
@ -1409,7 +1409,7 @@ class DirRes(CStruct):
for entry in my_dir.resentries:
if not entry.offsettosubdir:
continue
if not entry.subdir in dir_todo:
if entry.subdir not in dir_todo:
dir_todo.append(entry.subdir)
else:
raise RuntimeError("recursive dir")
@ -1447,7 +1447,7 @@ class DirRes(CStruct):
for entry in my_dir.resentries:
if not entry.offsettosubdir:
continue
if not entry.subdir in dir_todo:
if entry.subdir not in dir_todo:
dir_todo.append(entry.subdir)
else:
raise RuntimeError("recursive dir")

View file

@ -111,7 +111,7 @@ class ContentVirtual(object):
@virt_stop: virt stop address
"""
rva_start = self.parent.virt2rva(virt_start)
if virt_stop != None:
if virt_stop is not None:
rva_stop = self.parent.virt2rva(virt_stop)
else:
rva_stop = None
@ -135,7 +135,7 @@ class ContentVirtual(object):
def find(self, pattern, start=0, end=None):
if start != 0:
start = self.parent.virt2rva(start)
if end != None:
if end is not None:
end = self.parent.virt2rva(end)
ret = self.parent.img_rva.find(pattern, start, end)
@ -146,7 +146,7 @@ class ContentVirtual(object):
def rfind(self, pattern, start=0, end=None):
if start != 0:
start = self.parent.virt2rva(start)
if end != None:
if end is not None:
end = self.parent.virt2rva(end)
ret = self.parent.img_rva.rfind(pattern, start, end)
@ -297,7 +297,7 @@ class PE(object):
self.Doshdr = pe.Doshdr.unpack(self.content, off, self)
off = self.Doshdr.lfanew
if off > len(self.content):
log.warn('ntsig after eof!')
log.warning('ntsig after eof!')
self.NTsig = None
return
self.NTsig = pe.NTsig.unpack(self.content,
@ -309,7 +309,7 @@ class PE(object):
self.DirRes = None
if self.NTsig.signature != 0x4550:
log.warn('not a valid pe!')
log.warning('not a valid pe!')
return
off += len(self.NTsig)
self.Coffhdr, length = pe.Coffhdr.unpack_l(self.content,
@ -346,7 +346,7 @@ class PE(object):
else:
raw_off = section.offset
if raw_off != section.offset:
log.warn('unaligned raw section (%x %x)!', raw_off, section.offset)
log.warning('unaligned raw section (%x %x)!', raw_off, section.offset)
section.data = StrPatchwork()
if section.rawsize == 0:
@ -575,7 +575,7 @@ class PE(object):
for section in self.SHList:
if off + len(bytes(self.SHList)) > section.offset:
log.warn("section offset overlap pe hdr 0x%x 0x%x" %
log.warning("section offset overlap pe hdr 0x%x 0x%x" %
(off + len(bytes(self.SHList)), section.offset))
self.DirImport.build_content(content)
self.DirExport.build_content(content)
@ -585,7 +585,7 @@ class PE(object):
self.DirTls.build_content(content)
if (self.Doshdr.lfanew + len(self.NTsig) + len(self.Coffhdr)) % 4:
log.warn("non aligned coffhdr, bad crc calculation")
log.warning("non aligned coffhdr, bad crc calculation")
crcs = compute_crc(bytes(content), self.NThdr.CheckSum)
content[self.Doshdr.lfanew + len(self.NTsig) + len(self.Coffhdr) + 64] = struct.pack('I', crcs)
return bytes(content)
@ -615,7 +615,7 @@ class PE(object):
def reloc_to(self, imgbase):
offset = imgbase - self.NThdr.ImageBase
if self.DirReloc is None:
log.warn('no relocation found!')
log.warning('no relocation found!')
for rel in self.DirReloc.reldesc:
rva = rel.rva
for reloc in rel.rels:

View file

@ -533,7 +533,7 @@ def advapi32_CryptHashData(jitter):
ret_ad, args = jitter.func_args_stdcall(["hhash", "pbdata", "dwdatalen",
"dwflags"])
if not args.hhash in winobjs.cryptcontext:
if args.hhash not in winobjs.cryptcontext:
raise ValueError("unknown crypt context")
data = jitter.vm.get_mem(args.pbdata, args.dwdatalen)
@ -547,7 +547,7 @@ def advapi32_CryptGetHashParam(jitter):
ret_ad, args = jitter.func_args_stdcall(["hhash", "param", "pbdata",
"dwdatalen", "dwflags"])
if not args.hhash in winobjs.cryptcontext:
if args.hhash not in winobjs.cryptcontext:
raise ValueError("unknown crypt context")
if args.param == 2:
@ -793,7 +793,7 @@ def kernel32_VirtualProtect(jitter):
'lpfloldprotect'])
# XXX mask hpart
flnewprotect = args.flnewprotect & 0xFFF
if not flnewprotect in ACCESS_DICT:
if flnewprotect not in ACCESS_DICT:
raise ValueError('unknown access dw!')
if args.lpfloldprotect:
@ -812,7 +812,7 @@ def kernel32_VirtualProtect(jitter):
size = jitter.vm.get_all_memory()[addr]["size"]
# Page is included in Protect area
if (paddr <= addr < addr + size <= paddr + psize):
log.warn("set page %x %x", addr, ACCESS_DICT[flnewprotect])
log.warning("set page %x %x", addr, ACCESS_DICT[flnewprotect])
jitter.vm.set_mem_access(addr, ACCESS_DICT[flnewprotect])
continue
@ -844,7 +844,7 @@ def kernel32_VirtualProtect(jitter):
for split_addr, split_access, split_data in splits:
if not split_data:
continue
log.warn("create page %x %x", split_addr,
log.warning("create page %x %x", split_addr,
ACCESS_DICT[flnewprotect])
jitter.vm.add_memory_page(
split_addr, split_access, split_data,
@ -858,7 +858,7 @@ def kernel32_VirtualAlloc(jitter):
'alloc_type', 'flprotect'])
if not args.flprotect in ACCESS_DICT:
if args.flprotect not in ACCESS_DICT:
raise ValueError('unknown access dw!')
if args.lpvoid == 0:
@ -1186,7 +1186,7 @@ def cryptdll_MD5Update(jitter):
ret_ad, args = jitter.func_args_stdcall(["ad_ctx", "ad_input", "inlen"])
index = jitter.vm.get_u32(args.ad_ctx)
if not index in winobjs.cryptdll_md5_h:
if index not in winobjs.cryptdll_md5_h:
raise ValueError('unknown h context', index)
data = jitter.vm.get_mem(args.ad_input, args.inlen)
@ -1200,7 +1200,7 @@ def cryptdll_MD5Final(jitter):
ret_ad, args = jitter.func_args_stdcall(["ad_ctx"])
index = jitter.vm.get_u32(args.ad_ctx)
if not index in winobjs.cryptdll_md5_h:
if index not in winobjs.cryptdll_md5_h:
raise ValueError('unknown h context', index)
h = winobjs.cryptdll_md5_h[index].digest()
jitter.vm.set_mem(args.ad_ctx + 88, h)
@ -1420,7 +1420,7 @@ def ntoskrnl_IoAllocateMdl(jitter):
def ntoskrnl_MmProbeAndLockPages(jitter):
ret_ad, args = jitter.func_args_stdcall(["p_mdl", "access_mode", "op"])
if not ad2mdl(args.p_mdl) in winobjs.nt_mdl:
if ad2mdl(args.p_mdl) not in winobjs.nt_mdl:
raise ValueError('unk mdl', hex(args.p_mdl))
jitter.func_ret_stdcall(ret_ad, 0)
@ -1430,7 +1430,7 @@ def ntoskrnl_MmMapLockedPagesSpecifyCache(jitter):
"cache_type", "base_ad",
"bugcheckonfailure",
"priority"])
if not ad2mdl(args.p_mdl) in winobjs.nt_mdl:
if ad2mdl(args.p_mdl) not in winobjs.nt_mdl:
raise ValueError('unk mdl', hex(args.p_mdl))
jitter.func_ret_stdcall(ret_ad, winobjs.nt_mdl[ad2mdl(args.p_mdl)].ad)
@ -1438,7 +1438,7 @@ def ntoskrnl_MmMapLockedPagesSpecifyCache(jitter):
def ntoskrnl_MmProtectMdlSystemAddress(jitter):
ret_ad, args = jitter.func_args_stdcall(["p_mdl", "prot"])
if not ad2mdl(args.p_mdl) in winobjs.nt_mdl:
if ad2mdl(args.p_mdl) not in winobjs.nt_mdl:
raise ValueError('unk mdl', hex(args.p_mdl))
jitter.func_ret_stdcall(ret_ad, 0)
@ -1446,7 +1446,7 @@ def ntoskrnl_MmProtectMdlSystemAddress(jitter):
def ntoskrnl_MmUnlockPages(jitter):
ret_ad, args = jitter.func_args_stdcall(['p_mdl'])
if not ad2mdl(args.p_mdl) in winobjs.nt_mdl:
if ad2mdl(args.p_mdl) not in winobjs.nt_mdl:
raise ValueError('unk mdl', hex(args.p_mdl))
jitter.func_ret_stdcall(ret_ad, 0)
@ -1454,7 +1454,7 @@ def ntoskrnl_MmUnlockPages(jitter):
def ntoskrnl_IoFreeMdl(jitter):
ret_ad, args = jitter.func_args_stdcall(['p_mdl'])
if not ad2mdl(args.p_mdl) in winobjs.nt_mdl:
if ad2mdl(args.p_mdl) not in winobjs.nt_mdl:
raise ValueError('unk mdl', hex(args.p_mdl))
del(winobjs.nt_mdl[ad2mdl(args.p_mdl)])
jitter.func_ret_stdcall(ret_ad, 0)
@ -1821,7 +1821,7 @@ def my_CreateEvent(jitter, funcname, get_str):
"binitialstate",
"lpname"])
s = get_str(args.lpname) if args.lpname else None
if not s in winobjs.events_pool:
if s not in winobjs.events_pool:
winobjs.events_pool[s] = (args.bmanualreset, args.binitialstate)
else:
log.warning('WARNING: known event')
@ -1908,7 +1908,7 @@ def ntdll_ZwProtectVirtualMemory(jitter):
# XXX mask hpart
flnewprotect = args.flnewprotect & 0xFFF
if not flnewprotect in ACCESS_DICT:
if flnewprotect not in ACCESS_DICT:
raise ValueError('unknown access dw!')
jitter.vm.set_mem_access(ad, ACCESS_DICT[flnewprotect])
@ -1927,7 +1927,7 @@ def ntdll_ZwAllocateVirtualMemory(jitter):
# ad = upck32(jitter.vm.get_mem(args.lppvoid, 4))
dwsize = jitter.vm.get_u32(args.pdwsize)
if not args.flprotect in ACCESS_DICT:
if args.flprotect not in ACCESS_DICT:
raise ValueError('unknown access dw!')
alloc_addr = winobjs.heap.next_addr(dwsize)
@ -2250,7 +2250,7 @@ def msvcrt_fprintf(jitter):
log.info("fprintf(%x, '%s') = '%s'" % (args.file, lambda addr:get_win_str_a(jitter, addr)(args.fmt), output))
fd = jitter.vm.get_u32(args.file + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Untested case")
winobjs.handle_pool[fd].info.write(output)
@ -2439,7 +2439,7 @@ def kernel32_TlsSetValue(jitter):
def kernel32_TlsGetValue(jitter):
ret_ad, args = jitter.func_args_stdcall(["tlsindex"])
if not args.tlsindex in winobjs.tls_values:
if args.tlsindex not in winobjs.tls_values:
raise ValueError("unknown tls val", repr(args.tlsindex))
jitter.func_ret_stdcall(ret_ad, winobjs.tls_values[args.tlsindex])
@ -2658,7 +2658,7 @@ def kernel32_CreateFileMapping(jitter, funcname, get_str):
ret = winobjs.handle_pool.add('filemapping', hmap_handle)
else:
if not args.hfile in winobjs.handle_pool:
if args.hfile not in winobjs.handle_pool:
raise ValueError('unknown handle')
ret = winobjs.handle_pool.add('filemapping', args.hfile)
jitter.func_ret_stdcall(ret_ad, ret)
@ -2678,10 +2678,10 @@ def kernel32_MapViewOfFile(jitter):
"dwfileoffsetlow",
"length"])
if not args.hfile in winobjs.handle_pool:
if args.hfile not in winobjs.handle_pool:
raise ValueError('unknown handle')
hmap = winobjs.handle_pool[args.hfile]
if not hmap.info in winobjs.handle_pool:
if hmap.info not in winobjs.handle_pool:
raise ValueError('unknown file handle')
hfile_o = winobjs.handle_pool[hmap.info]
@ -2692,7 +2692,7 @@ def kernel32_MapViewOfFile(jitter):
log.debug('MapViewOfFile len: %x', len(data))
if not args.flprotect in ACCESS_DICT:
if args.flprotect not in ACCESS_DICT:
raise ValueError('unknown access dw!')
alloc_addr = winobjs.heap.alloc(jitter, len(data))
@ -2707,7 +2707,7 @@ def kernel32_MapViewOfFile(jitter):
def kernel32_UnmapViewOfFile(jitter):
ret_ad, args = jitter.func_args_stdcall(['ad'])
if not args.ad in winobjs.handle_mapped:
if args.ad not in winobjs.handle_mapped:
raise NotImplementedError("Untested case")
"""
hfile_o, dwfileoffsethigh, dwfileoffsetlow, length = winobjs.handle_mapped[ad]
@ -2942,7 +2942,7 @@ def msvcrt_fseek(jitter):
ret_ad, args = jitter.func_args_cdecl(['stream', 'offset', 'orig'])
fd = jitter.vm.get_u32(args.stream + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Untested case")
o = winobjs.handle_pool[fd]
o.info.seek(args.offset, args.orig)
@ -2953,7 +2953,7 @@ def msvcrt_ftell(jitter):
ret_ad, args = jitter.func_args_cdecl(["stream"])
fd = jitter.vm.get_u32(args.stream + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Untested case")
o = winobjs.handle_pool[fd]
off = o.info.tell()
@ -2963,7 +2963,7 @@ def msvcrt_ftell(jitter):
def msvcrt_rewind(jitter):
ret_ad, args = jitter.func_args_cdecl(["stream"])
fd = jitter.vm.get_u32(args.stream + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Untested case")
o = winobjs.handle_pool[fd]
# off = o.info.seek(0, 0)
@ -2973,7 +2973,7 @@ def msvcrt_rewind(jitter):
def msvcrt_fread(jitter):
ret_ad, args = jitter.func_args_cdecl(["buf", "size", "nmemb", "stream"])
fd = jitter.vm.get_u32(args.stream + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Untested case")
data = winobjs.handle_pool[fd].info.read(args.size * args.nmemb)
@ -2984,7 +2984,7 @@ def msvcrt_fread(jitter):
def msvcrt_fwrite(jitter):
ret_ad, args = jitter.func_args_cdecl(["buf", "size", "nmemb", "stream"])
fd = jitter.vm.get_u32(args.stream + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Unknown file handle!")
data = jitter.vm.get_mem(args.buf, args.size*args.nmemb)
@ -2996,7 +2996,7 @@ def msvcrt_fclose(jitter):
ret_ad, args = jitter.func_args_cdecl(['stream'])
fd = jitter.vm.get_u32(args.stream + 0x10)
if not fd in winobjs.handle_pool:
if fd not in winobjs.handle_pool:
raise NotImplementedError("Untested case")
o = winobjs.handle_pool[fd]
# off = o.info.close()
@ -3216,7 +3216,7 @@ def msvcrt__ultow(jitter):
ret_ad, args = jitter.func_args_cdecl(["value", "p", "radix"])
value = args.value & 0xFFFFFFFF
if not args.radix in [10, 16, 20]:
if args.radix not in [10, 16, 20]:
raise ValueError("Not tested")
s = int2base(value, args.radix)
set_win_str_w(jitter, args.p, s)

View file

@ -338,7 +338,7 @@ def fix_InLoadOrderModuleList(jitter, modules_info):
ntdll_pe = modules_info.name2module.get("ntdll.dll", None)
special_modules = [main_pe, kernel32_pe, ntdll_pe]
if not all(special_modules):
log.warn(
log.warning(
'No main pe, ldr data will be unconsistant %r', special_modules)
loaded_modules = modules_info.modules
else:
@ -365,7 +365,7 @@ def fix_InMemoryOrderModuleList(jitter, modules_info):
ntdll_pe = modules_info.name2module.get("ntdll.dll", None)
special_modules = [main_pe, kernel32_pe, ntdll_pe]
if not all(special_modules):
log.warn('No main pe, ldr data will be unconsistant')
log.warning('No main pe, ldr data will be unconsistant')
loaded_modules = modules_info.modules
else:
loaded_modules = [module for module in modules_info.modules
@ -392,7 +392,7 @@ def fix_InInitializationOrderModuleList(jitter, modules_info):
ntdll_pe = modules_info.name2module.get("ntdll.dll", None)
special_modules = [main_pe, kernel32_pe, ntdll_pe]
if not all(special_modules):
log.warn('No main pe, ldr data will be unconsistant')
log.warning('No main pe, ldr data will be unconsistant')
loaded_modules = modules_info.modules
else:
loaded_modules = [module for module in modules_info.modules

View file

@ -24,7 +24,8 @@ def M(addr):
return ExprMem(ExprInt(addr, 16), 16)
def compute(asm, inputstate={}, debug=False):
def compute(asm, inputstate=None, debug=False):
inputstate = inputstate or {}
loc_db = LocationDB()
sympool = dict(regs_init)
sympool.update({k: ExprInt(v, k.size) for k, v in viewitems(inputstate)})

View file

@ -23,7 +23,8 @@ def M(addr):
return ExprMem(ExprInt(addr, 16), 16)
def compute(asm, inputstate={}, debug=False):
def compute(asm, inputstate=None, debug=False):
inputstate = inputstate or {}
loc_db = LocationDB()
sympool = dict(regs_init)
sympool.update({k: ExprInt(v, k.size) for k, v in viewitems(inputstate)})

View file

@ -24,7 +24,8 @@ def M(addr):
return ExprMem(ExprInt(addr, 32), 32)
def compute(asm, inputstate={}, debug=False):
def compute(asm, inputstate=None, debug=False):
inputstate = inputstate or {}
loc_db = LocationDB()
sympool = dict(regs_init)
sympool.update({k: ExprInt(v, k.size) for k, v in viewitems(inputstate)})

View file

@ -43,7 +43,8 @@ def symb_exec(lbl, lifter, ircfg, inputstate, debug):
if k not in EXCLUDE_REGS and regs_init.get(k, None) != v
}
def compute(Lifter, mode, asm, inputstate={}, debug=False):
def compute(Lifter, mode, asm, inputstate=None, debug=False):
inputstate = inputstate or {}
loc_db = LocationDB()
instr = mn.fromstring(asm, loc_db, mode)
code = mn.asm(instr)[0]
@ -52,10 +53,11 @@ def compute(Lifter, mode, asm, inputstate={}, debug=False):
lifter = Lifter(loc_db)
ircfg = lifter.new_ircfg()
lbl = lifter.add_instr_to_ircfg(instr, ircfg)
return symb_exec(lbl, lifter, ircfg, inputstate, debug)
return symb_exec(lbl, lifter, ircfg, inputstate or dict(), debug)
def compute_txt(Lifter, mode, txt, inputstate={}, debug=False):
def compute_txt(Lifter, mode, txt, inputstate=None, debug=False):
inputstate = inputstate or {}
loc_db = LocationDB()
asmcfg = parse_asm.parse_txt(mn, mode, txt, loc_db)
loc_db.set_location_offset(loc_db.get_name_location("main"), 0x0)

View file

@ -457,11 +457,11 @@ test_args = [(0x401000, 0x40100d, ["EAX"], 1),
(0x401000, 0x401025, ["EAX", "EBX"], 4),
(0x401000, 0x401007, ["EBX"], 3),
]
for i, test_args in enumerate(test_args):
for i, test_arg in enumerate(test_args):
test_dg = SemanticTestAsm("x86_32", "PE", ["dg_test_%.2d" % i])
testset += test_dg
testset += TestDepgraph(i, False, *test_args, depends=[test_dg])
testset += TestDepgraph(i, True, *test_args, depends=[test_dg])
testset += TestDepgraph(i, False, *test_arg, depends=[test_dg])
testset += TestDepgraph(i, True, *test_arg, depends=[test_dg])
## Jitter
for script in ["jitload.py",
@ -881,8 +881,8 @@ class TestSequence(unittest.TestCase):
executable = t.executable if t.executable else sys.executable
print("Exec: ", executable, "(explicit)" if t.executable else "(default)")
for t in t.depends:
assert "shellcode.py" in t.command_line[0], "At the moment, only dependencies on 'shellcode.py' are handled"
for d in t.depends:
assert "shellcode.py" in d.command_line[0], "At the moment, only dependencies on 'shellcode.py' are handled"
subprocess.check_call(
[executable] + t.command_line,