查看: 79|回覆: 0

Python逆向(一)—— 前言及Python运行原理

[複製鏈接]

1

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2009-9-10
發表於 2019-11-5 16:34:00 | 顯示全部樓層 |閲讀模式

一、前言

最近在学习Python逆向相关,涉及到python字节码的阅读,编译及反汇编一些问题。经过长时间的学习有了一些眉目,为了方便大家交流,特地将学习过程整理,形成了这篇专题。专题对python逆向的基础知识进行了简洁有效的解读,暂不涉及python编译过程中的代码混淆。文章中如有不恰当的地方敬请指正,我在学习过程中也会对章节内容持续补充修正。

  • Python逆向(一)—— 前言及Python运行原理
  • Python逆向(二)—— pyc文件结构分析
  • Python逆向(三)—— Python编译运行及反汇编
  • Python逆向(四)—— Python内置模块dis.py源码详解
  • Python逆向(五)—— Python字节码解读

二、什么是Python

Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。

三、解释型语言和编译型语言的区别

我们编程都是用的高级语言,计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。翻译的方式有两种,一个是编译,一个是解释。

用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源高级程序编译成为机器语言文件。

解释型语言没有严格编译汇编过程,由解释器将代码块按需要变运行边翻译给机器执行。因此解释型语言一度存在运行效率底,重复解释的问题。但是通过对解释器的优化!可以提高解释型语言的运行效率。Python就属于这一种编程语言。

四、Python运行原理概述

Python是解释型语言,没有严格意义上的编译和汇编过程。但是一般可以认为编写好的python源文件,由python解释器翻译成以.pyc为结尾的字节码文件。pyc文件是二进制文件,可以由python虚拟机直接运行。

注:有的朋友可能会问,为什么我运行python,有时候生成pyc文件,有时候没有呢?Python在执行import语句时,将会到已设定的path中寻找对应的模块。并且把对应的模块编译成相应的PyCodeObject(python中的一个类)中间结果,然后创建pyc文件,并将中间结果写入该文件。然后,Python会import这个pyc文件,实际上也就是将pyc文件中的PyCodeObject重新复制到内存中。而被直接运行的python代码一般不会生成pyc文件。

加载模块时,如果同时存在.py和.pyc,Python会尝试使用.pyc,如果.pyc的编译时间早于.py的修改时间,则重新编译.py并更新.pyc。

五、综述

通过上面的描述,我们知道python在整个运行过程中主要涉及源码xxx.py,编译好的文件xxx.pyc两类文件。其中xxx.pyc是可以由虚拟机直接执行的,是python将目标源码编译成字节码以后再磁盘上的文件形式。



来源:https://www.cnblogs.com/blili/p/11799398.html
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部