什么是Python反汇编程序用于?

时间:2013-09-06 00:11:46

标签: python disassembly

我注意到对Python反汇编程序有很大的兴趣,例如dis模块。

然而,令人惊讶地发现这些拆卸器通常用于工业/学术界是很困难的。除了满足好奇心(完全合法的努力!)或编写Python实现之外,它们有什么共同的用途吗?

3 个答案:

答案 0 :(得分:4)

除了好奇心或调查Python实现的细节之外,Python字节码反汇编程序没有共同的用途。它类似于大多数C程序员从不需要查看汇编程序,即使他们正在编译C代码到汇编程序并使用像gdb这样的调试程序。在Python的情况下,pdb(还有tracebacks等)都可以很好地隐藏普通程序员眼中的字节码。

当然,无论如何,了解它可能会很有趣。这是了解Python如何工作的一种方法: - )

答案 1 :(得分:2)

对于解析器来说有一个实际用途,虽然这是一个非常罕见的情况,我只是为了完整性而提到:当你在哪里优化代码并且你想要检查是否以不同方式编写代码可以使它更快。这仅适用于速度非常重要的代码。您通常不需要担心这种低级优化。

例如,CPython编译器优化仅包含文字的表达式,在编译时将'foo' + 'bar'转换为'foobar'。对于其他Python实现,这可能不一样,因此检查编译器是否优化它的最佳方法是使用反汇编程序:

>>> import dis
>>> def f():
...     return 'foo'+'bar', 3*100, 'spam'*2
...
>>> dis.dis(f)
  2           0 LOAD_CONST               9 (('foobar', 300, 'spamspam'))
              3 RETURN_VALUE

答案 2 :(得分:0)

如果您想在机器语言程序中查找一行代码,例如导致令人讨厌的弹出窗口或恶意软件的代码,反汇编程序可能会帮助您找到有毒代码。

此外,正如Flornquake所说,由像Python这样的高阶语言组装的程序有时效率不高。如果你需要一个高速程序,比如读取来自外部设备的快速数据,你可能需要进入汇编代码并调整它以获得最大速度。一个例子可能是数字化20KHz音乐信号。