繁体   English   中英

如何从字节码中获取功能代码对象?

[英]How to get function code object from bytecode?

我需要创建python函数的调用图,然后修改某些函数的字节码。

我开始玩反汇编,发现该功能由MAKE_FUNCTION操作码完成,并且代码对象以某种方式传递给它

 32          96 LOAD_CONST              25 ((None, None, True, 'off', None, False))
             98 LOAD_CONST              15 (<code object foobar at 0x7fc46bff6d20, file "foo.py", line 25>)
            100 LOAD_CONST              16 ('foo')
            102 MAKE_FUNCTION            1
            104 STORE_NAME              15 ('fun')

好的,我在此文件中找到了调用图的根,但是下一步该怎么做? 我实际上如何获得此代码对象?

函数类型就是您想要的。 您可以从types模块(在这里是types.FunctionType )或只是type(lambda:0) 对类型执行help()以查看创建函数对象所需的参数。

构造函数所需的主要内容是代码对象。 您可以使用f.func_code从现有函数f获得该f.func_code 如果要修改字节码,则需要创建一个新的代码对象来包含它。 可以使用type()和函数来获取其类型,对类型执行help()会告诉您需要传递什么。

如果您将新功能基于现有功能,则可以从现有功能中挖掘大部分需求。 请参阅inspect模块文档中的此表 ,以查看函数和代码对象的哪些属性包含您感兴趣的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM