python对C语言实现反汇编,为什么C程序需要反编译器,但python程序不需要?

注意:作者拒绝在这个主题的深厚专业知识。有些断言可能不正确。

Python实际上被编译成字节码,这是python解释器运行的东西。无论何时使用Python模块,Python都会生成一个.pyc文件,其名称对应于该模块。这相当于编译C文件时生成的.o文件。

所以,如果你想要的东西拆开,将.pyc文件将是吧:)

了Python经过时编译一个模块是非常类似于gcc或其他C编译器C源代码的代码做的过程。主要区别在于它作为文件执行的一部分透明地进行。它也是可选的:在运行非模块(即最终用户脚本)时,Python只会解释代码而不是先编译它。

所以真的你的问题是“为什么python程序是以源代码而不是以编译模块的形式发布的?”换句话说,“为什么C应用程序是作为编译的二进制文件而不是源代码来分发的?”

它曾经是非常普遍的C应用程序作为源代码分发。这是在操作系统及其各种子实体(即Linux发行版)变得更加成熟之前回来的。一些发行版,例如gentoo,仍然将应用程序分发为源代码。应用程序有点尖端或模糊,仍然作为它们所针对的所有平台的源代码分发。

原因是兼容性和依赖性。您可以在Mac上运行预编译的二进制Safari,或者在Ubuntu Linux上运行Firefox,原因是它专门为该操作系统,体系结构(例如x86_64)和库集合构建。

不幸的是,编译大型应用程序相当缓慢,每次应用程序更新时都需要至少部分重做。因此二元分布的动机。

那么,为什么不创建一个Python的二进制分布?首先,正如Aaron mentions,模块需要重新编译每个新版本的Python字节码。但这与重建C应用程序以链接动态库的新版本类似 - 在这种意义上,Python库与C库类似。

真正的原因是Python编译比C编译快得多。我认为这部分是由于该语言的动态性质,也因为它不像编译过程那么彻底。这有其折衷:特别是,Python应用程序的运行速度远远超过C程序,因为Python必须将编译的字节码解释为处理器的指令,而C应用程序已经包含这些指令。

所有人都说,有一个名为py2exe的程序,它将采用Python模块和发行版并构建预编译的Windows可执行文件,其中包括模块及其依赖项的逻辑(包括Python本身)。我想这一点是为了避免强制人们在他们的Windows系统上安装Python来运行你的应用程序。在Linux下,或者我认为甚至OS/X,Python通常已经安装,所以预编译并不是真的必要。 Linux系统也有超级包管理器,如果它们尚未安装,它们将透明地安装诸如Python之类的依赖项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值