专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
今天看啥  ›  专栏  ›  Python开发者

一文让你搞懂 Python 的 pyc 文件

Python开发者  · 公众号  · Python  · 2024-10-11 08:50
    

主要观点总结

本文介绍了Python程序在执行过程中PyCodeObject对象的生成和触发pyc文件生成的过程,以及Python对PyCodeObject对象的导出机制。同时,也介绍了字节码混淆的技术。

关键观点总结

关键观点1: PyCodeObject对象的生成和触发pyc文件生成的过程

Python程序在执行时,会将源代码编译成PyCodeObject对象并保存在.pyc文件中。触发pyc文件生成的方式包括import语句、py_compile模块手动生成等。

关键观点2: Python对PyCodeObject对象的导出机制

Python对PyCodeObject对象的导出是通过将其序列化后写入到.pyc文件中实现的。在写入过程中,会先写入一些标识信息,如魔法数、时间戳等,然后写入PyCodeObject对象本身。

关键观点3: 字节码混淆的技术

字节码混淆是一种通过插入恶意指令和跳转指令来干扰反编译工具的技术。混淆后的字节码对于解释器执行没有影响,但对于反编译工具而言则无法正常工作。


文章预览

pyc 文件的触发 py 文件在执行的时候会先被编译成 PyCodeObject 对象,并且该对象还会被保存到 pyc 文件中。 然而事实并不总是这样,有时当我们运行一个简单的程序时,并没有产生 pyc 文件。因此我们猜测:有些 Python 程序只是临时完成一些琐碎的工作,这样的程序仅仅只会运行一次,然后就不会再使用了,因此也就没有保存至 pyc 文件的必要。 如果我们在代码中加上了一个 import abc 这样的语句,再执行你就会发现解释器为 abc.py 生成了 pyc 文件,这就说明 import 语句会触发 pyc 的生成。 实际上,在运行过程中,如果碰到 import abc 这样的语句,那么 Python 会在设定好的 path 中寻找 abc.pyc 或者 abc.pyd 文件。但如果没有这些文件,而是只发现了 abc.py,那么会先将 abc.py 编译成 PyCodeObject,然后写入到 pyc 文件中。 接下来,再对 abc.pyc 进行 import 动作。对的 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览