是否可以在不使用co_code的情况下获取python字节码?

mik*_*azo 4 python bytecode reverse-engineering

假设我在python解释器中并定义一个函数如下:

def h(a):
  return a
Run Code Online (Sandbox Code Playgroud)

如果我想查看字节码(不是使用dis的反汇编),我通常可以使用h.func_code.co_code.有没有其他方法来查看字节码?

例如,在解释器中,如果我只是在h不进行函数调用的情况下键入,我会得到函数的地址.我可以使用该地址来获取字节码吗?还有其他方法吗?

评论中的一些其他信息:

该应用程序是用python编写的,并使用Py2App,cx_freeze或py2exe之类的东西打包.我在可执行文件上玩了一些技巧,现在,在启动时,可执行文件将我转储到python命令行.从那里,我手动将我的功能h输入到interepeter中.

的其他属性h.func_code都存在,如co_varnames,co_argcount等,但co_code并非如此.

如果我输入h.func_code.co_code翻译,我得到'code' object has no attribute 'co_code'.

更新:再次发表评论.据我所知,操作码已重新映射为随应用程序一起提供的python解释器.

Mar*_*ers 5

如果您已经定义了自己的def h(): pass虚函数,并且该函数没有.func_code.co_code值,那么很可能包含的python解释器是一个co_code已清除插槽的自定义编译版本.

解决方法很简单,将Contents/Resourceszip文件(在所有子目录中)复制到别处,将它们添加到您PYTHONPATH的代码并将代码导入您自己的解释器.