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解释器.
如果您已经定义了自己的def h(): pass
虚函数,并且该函数没有.func_code.co_code
值,那么很可能包含的python解释器是一个co_code
已清除插槽的自定义编译版本.
解决方法很简单,将Contents/Resources
zip文件(在所有子目录中)复制到别处,将它们添加到您PYTHONPATH
的代码并将代码导入您自己的解释器.
归档时间: |
|
查看次数: |
1267 次 |
最近记录: |