Ich denke, einige Bytecode-Manipulation (denke genetische Programmierung) in Python.Wie validiere ich Python-Bytecode?
stieß ich auf ein Testfall in crashers test section von Quellbaum Python, die besagt:
Broken bytecode objects can easily crash the interpreter. This is not going to be fixed.
So ist die Frage, wie angegeben gezwickt Byte-Code zu bestätigen, dass es Dolmetscher wird nicht abstürzen? Ist es überhaupt möglich?
Testquelle, nach http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html
cc = (lambda fc=(
lambda n: [
c for c in
().__class__.__bases__[0].__subclasses__()
if c.__name__ == n
][0]
):
fc("function")(
fc("code")(
0, 0, 0, 0, "KABOOM",(),(),(), "", "", 0, ""
), {}
)()
)
Hier legt dieses Modul cc
, dass, wenn genannt, mymod.cc()
Abstürze Interpreter. Zugegeben, dies ist ein sehr schwieriges Beispiel, das ein neues Code-Objekt mit dem benutzerdefinierten Bytecode "KABOOM"
erstellt und dann ausführt.
Ich würde etwas akzeptieren, das vordefinierte Bytecode, z. aus einer .pyc
Datei.
Ich kenne keine Methode, die Bytecode validieren wird, nein. Dies ist eine schwierige Aufgabe. Besser nur einen gültigen Bytecode erzeugen. –
Ich denke, das kann unentscheidbar sein. Angenommen, Sie haben einen Bytecode, der äquivalent ist zu: 'if method_that_may_loop_forever(): crash()'. Sie müssten das [Halting Problem] (http://en.wikipedia.org/wiki/Halting_problem) lösen, um festzustellen, ob es abstürzt oder nicht. – Kevin
@Kevin Ich möchte das Problem nicht lösen. Ich möchte nur feststellen, ob eine bestimmte Bytecode-Sequenz garantiert sicher oder möglicherweise unsicher ist. Ähnlich wie JVM. –