![](/img/trans.png)
[英]Python3.7 - How to get function signature from the bytecode's code object?
[英]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.