ソースを参照

Adding stuff!

master
Ben Kurtovic 12年前
コミット
59eaf62931
1個のファイルの変更38行の追加40行の削除
  1. +38
    -40
      func_smash.py

+ 38
- 40
func_smash.py ファイルの表示

@@ -1,12 +1,47 @@
import imp
import opcode
import os
import random
import re
import sys
import traceback
import types

############## CODE ###########################################################

MARKOV_START = -1
MARKOV_END = -2

def run():
try:
path, name = os.path.split(sys.argv[1])
name = re.sub("\.pyc?$", "", name)
except IndexError:
raise RuntimeError("Needs a filename as a command-line argument")
f, path, desc = imp.find_module(name, [path])
try:
module = imp.load_module(name, f, path, desc)
finally:
f.close()

corpus = module.corpus
chain = make_chain(corpus)
func = make_function(chain, "func")
print "Using {0}-function corpus.".format(len(corpus))
print "Smashed function disassembly:"
print_function(func)
print
n = 12.0
print "func(%s) =" % n, func(n)
if len(sys.argv) > 2 and sys.argv[2] == "-i": # Allow input after the fact
print
while 1:
try:
input(">>> ")
except EOFError:
break
except Exception:
traceback.print_exc()

def make_chain(funcs):
chain = {}
for func in funcs:
@@ -137,42 +172,5 @@ def _int_to_opname(op):
return "END"
return opcode.opname[op]

############## FUNCTION CORPUS ################################################

def f1(a):
b = a + 9.0
return b

def f2(a):
b = a - 7.0
return b

def f3(a):
b = a * 5.0
return b

def f4(a):
b = a / 3.0
return b

def f5(a):
b = a ** 2.0
return b

def f6(a):
b = a % 10.0
return b

corpus = [f1, f2, f3, f4, f5, f6]

############## DEMO ###########################################################

if __name__ == "__main__":
chain = make_chain(corpus)
func = make_function(chain, "func")
print "Using {0}-function corpus.".format(len(corpus))
print "Smashed function disassembly:"
print_function(func)
print
n = 12.0
print "func(%s) =" % n, func(n)
run()

読み込み中…
キャンセル
保存