【发布时间】:2012-09-12 21:28:23
【问题描述】:
假设我在python解释器中,定义一个函数如下:
def h(a):
return a
如果我想查看字节码(不是使用 dis 的反汇编),我通常可以使用 h.func_code.co_code。有没有其他方法可以查看字节码?
例如,在解释器中,如果我只键入h 而不使其成为函数调用,我会得到函数的地址。我可以使用该地址来获取字节码吗?还有其他方法吗?
来自 cmets 的一些附加信息:
该应用程序是用 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'。
更新:再次来自 cmets。据我所知,操作码已针对应用程序附带的 python 解释器重新映射。
【问题讨论】:
-
为什么
h.func_code.co_code不够好?使用内存地址不会更容易。 -
因为某种原因它不存在。我正在学习 python 逆向工程,似乎在该软件中添加了一些保护措施。其中之一似乎使 co_code 不可用。
-
对于初学者,你知道它是用 Python 编写的吗?
type是什么? (另外,dircan be overriden by the object,不要把你的农场押在它的产量上。) -
@mikeazo 看起来不像是版本字符串。 完整版字符串是什么?
-
理论上是可以从python解释器中删除
co_code属性。那将需要自定义解释器构建。您仍然可以将所有 python 代码加载到您自己的解释器中(只需解压缩Contents/Resources/目录中的 zip 文件并将它们放在您的路径上。
标签: python reverse-engineering bytecode