mirror of
https://github.com/cea-sec/miasm
synced 2026-08-17 10:26:03 -04:00
Merge 8bf62812c4 into 24a64bb30a
This commit is contained in:
commit
87caa9ce26
38 changed files with 193 additions and 188 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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':
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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])
|
||||
|
|
|
|||
|
|
@ -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 == "-":
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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""
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)})
|
||||
|
|
|
|||
|
|
@ -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)})
|
||||
|
|
|
|||
|
|
@ -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)})
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue