3

我注意到人们对 Python 反汇编程序(例如dis模块)非常感兴趣。

然而,很难找到这些反汇编程序通常用于工业/学术界的用途。除了满足好奇心(完全合法的努力!)或编写 Python 实现之外,它们还有什么共同用途吗?

4

3 回答 3

4

除了好奇或调查 Python 实现的细节之外,Python 字节码反汇编器没有其他用途。这类似于大多数 C 程序员从不需要查看汇编程序,即使他们正在将 C 代码编译为汇编程序并使用 gdb 之类的调试器。在 Python 的例子中,pdb(还有回溯等)都很好地隐藏了普通程序员眼中的字节码。

当然,无论如何学习它会很有趣。这是了解 Python 真正工作原理的一种方法 :-)

于 2013-09-06T17:24:41.290 回答
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
于 2013-09-06T19:44:15.323 回答
0

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

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

于 2014-10-22T19:07:49.443 回答