|
@@ -7,6 +7,11 @@ import re |
|
|
import sys |
|
|
import sys |
|
|
import types |
|
|
import types |
|
|
|
|
|
|
|
|
|
|
|
OPMAP = opcode.opmap |
|
|
|
|
|
OP_HASCALL = [OPMAP[n] for n in ("CALL_FUNCTION", "CALL_FUNCTION_VAR", |
|
|
|
|
|
"CALL_FUNCTION_KW", "CALL_FUNCTION_VAR_KW")] |
|
|
|
|
|
OP_MAKEFUNC = [OPMAP[n] for n in ("MAKE_FUNCTION", "MAKE_CLOSURE")] |
|
|
|
|
|
|
|
|
MARKOV_START = -1 |
|
|
MARKOV_START = -1 |
|
|
MARKOV_END = -2 |
|
|
MARKOV_END = -2 |
|
|
|
|
|
|
|
@@ -108,8 +113,10 @@ def _get_argument(codeobj, codestring, i, code): |
|
|
return codeobj.co_varnames[arg] |
|
|
return codeobj.co_varnames[arg] |
|
|
elif code in opcode.hascompare: |
|
|
elif code in opcode.hascompare: |
|
|
return opcode.cmp_op[arg] |
|
|
return opcode.cmp_op[arg] |
|
|
elif code == opcode.opmap["CALL_FUNCTION"]: |
|
|
|
|
|
|
|
|
elif code in OP_HASCALL: |
|
|
return (ord(codestring[i]), ord(codestring[i + 1])) |
|
|
return (ord(codestring[i]), ord(codestring[i + 1])) |
|
|
|
|
|
elif code in OP_MAKEFUNC: |
|
|
|
|
|
return arg |
|
|
raise NotImplementedError(code, opcode.opname[code]) |
|
|
raise NotImplementedError(code, opcode.opname[code]) |
|
|
|
|
|
|
|
|
def _chain_append(chain, first, second): |
|
|
def _chain_append(chain, first, second): |
|
@@ -142,9 +149,11 @@ def _make_codes(chain): |
|
|
_coerce_arg_into_codes(codes, varnames.index(arg)) |
|
|
_coerce_arg_into_codes(codes, varnames.index(arg)) |
|
|
elif code in opcode.hascompare: |
|
|
elif code in opcode.hascompare: |
|
|
_coerce_arg_into_codes(codes, opcode.cmp_op.index(arg)) |
|
|
_coerce_arg_into_codes(codes, opcode.cmp_op.index(arg)) |
|
|
elif code == opcode.opmap["CALL_FUNCTION"]: |
|
|
|
|
|
|
|
|
elif code in OP_HASCALL: |
|
|
codes.append(arg[0]) |
|
|
codes.append(arg[0]) |
|
|
codes.append(arg[1]) |
|
|
codes.append(arg[1]) |
|
|
|
|
|
elif code in OP_MAKEFUNC: |
|
|
|
|
|
_coerce_arg_into_codes(codes, arg) |
|
|
else: |
|
|
else: |
|
|
raise NotImplementedError(code, opcode.opname[code]) |
|
|
raise NotImplementedError(code, opcode.opname[code]) |
|
|
instruction = random.choice(chain[code]) |
|
|
instruction = random.choice(chain[code]) |
|
|