Browse Source

COMPARE_OP support

master
Ben Kurtovic 12 years ago
parent
commit
10044e576f
1 changed files with 8 additions and 2 deletions
  1. +8
    -2
      func_smash.py

+ 8
- 2
func_smash.py View File

@@ -26,6 +26,8 @@ def make_chain(funcs):
arg = co.co_consts[oparg] arg = co.co_consts[oparg]
elif op in opcode.haslocal: elif op in opcode.haslocal:
arg = co.co_varnames[oparg] arg = co.co_varnames[oparg]
elif op in opcode.hascompare:
arg = opcode.cmp_op[oparg]
else: else:
raise NotImplementedError(op, opcode.opname[op]) raise NotImplementedError(op, opcode.opname[op])
else: else:
@@ -69,13 +71,17 @@ def _make_codes(chain):
codes.append(op) codes.append(op)
if op >= opcode.HAVE_ARGUMENT: if op >= opcode.HAVE_ARGUMENT:
if op in opcode.hasconst: if op in opcode.hasconst:
if arg not in constants:
constants.append(arg)
args = constants args = constants
elif op in opcode.haslocal: elif op in opcode.haslocal:
if arg not in varnames:
varnames.append(arg)
args = varnames args = varnames
elif op in opcode.hascompare:
args = opcode.cmp_op
else: else:
raise NotImplementedError(op, opcode.opname[op]) raise NotImplementedError(op, opcode.opname[op])
if arg not in args:
args.append(arg)
codes.append(args.index(arg)) codes.append(args.index(arg))
codes.append(0) codes.append(0)
code = random.choice(chain[op]) code = random.choice(chain[op])


Loading…
Cancel
Save