如何验证Python字节码?

Dim*_*nek 5 python genetic-programming bytecode-manipulation

我想在Python中做一些字节码操作(想想遗传编程).

我在Python源代码树的crashers测试部分遇到了一个测试用例:

破碎的字节码对象很容易使解释器崩溃.这不是固定的.

因此问题,如何验证给定的调整字节代码,它不会崩溃解释器?它甚至可能吗?

测试源,在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, ""
        ), {}
    )()
)
Run Code Online (Sandbox Code Playgroud)

这里,该模块定义cc了如果被调用则mymod.cc()崩溃解释器.虽然这是一个非常棘手的例子,"KABOOM"它使用自定义字节码创建新的代码对象,然后运行它.

我接受一些验证预定义字节码的东西,例如来自.pyc文件.

Ale*_*lex 1

两者都过时了,第一个没有代码(至少我找不到),但可能有助于了解可以做什么/如何做以及有哪些限制。

完全有效的字节码仍然可以做可怕的事情