python - 源不可用时调试python字节码

标签 python debugging reverse-engineering bytecode bytecode-manipulation

我需要调试一个编译好的 python 脚本(pyc 文件)。
原始来源不可用。

有没有办法直接调试字节码?

我能找到的最接近的东西是用 LLTRACE 构建 python启用。这种技术的缺点是我无法控制执行,这不是真正的调试,因为单步执行,设置断点不可用。

另一种可能的技术是 this ,但同样,出于同样的原因,这不适合。

请注意,由于字节码被混淆,因此无法反编译 pyc 并调试结果。

最佳答案

是的,当没有源代码时,可以调试 Python pyc 文件。

我写的调试器就是这样做的。见 https://rocky.github.io/pycon2018.co/#/18和周围的幻灯片。

没收是一个单独的问题。并且关于混淆是什么的问题是模糊的。

如果只是品种变量名foo在代码对象“co_names”表中被替换为 ; os.system("rm -fr")那么这很容易处理,因为 ; os.system("rm -fr")不是有效的标识符名称。

这实际上比反编译过程更容易处理。见 https://github.com/rocky/python-xdis/issues/58对于那个方面。

但即使没有去混淆,调试器也能工作。源文本看起来很时髦。但是,您始终可以使用反汇编来解决源代码的外观问题。

Python 调试器 trepan2trepan3k还提供调试器内部的反汇编。

关于python - 源不可用时调试python字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32486204/

相关文章:

python - 如何从 curve_fit 获得置信区间

android - 应用程序正在等待调试器附加

javascript - 无论如何将 Firebug 'profile' 结果记录到外部文件?

C#:以干净的方式将调试器附加到进程

c++ - 如何在 C++ 中编辑操作码或写入内存或编辑字节?

c - x87 浮点指令转换为 C 代码

c++ - 开放框架 + Python

python - scipy.stats 随机抽取之间的区别....rvs 和 numpy.random

c++ - 更改表条目没有重定向功能?

python - OpenGL 纹理 - 一些 jpg 正在以一种奇怪的方式扭曲