Python逆向(一)—— 前言及Python运行原理
<h1 id="一前言">一、前言</h1><p>最近在学习Python逆向相关,涉及到python字节码的阅读,编译及反汇编一些问题。经过长时间的学习有了一些眉目,为了方便大家交流,特地将学习过程整理,形成了这篇专题。专题对python逆向的基础知识进行了简洁有效的解读,暂不涉及python编译过程中的代码混淆。文章中如有不恰当的地方敬请指正,我在学习过程中也会对章节内容持续补充修正。</p>
<ul>
<li>Python逆向(一)—— 前言及Python运行原理</li>
<li>Python逆向(二)—— pyc文件结构分析</li>
<li>Python逆向(三)—— Python编译运行及反汇编</li>
<li>Python逆向(四)—— Python内置模块dis.py源码详解</li>
<li>Python逆向(五)—— Python字节码解读</li>
</ul>
<h1 id="二什么是python">二、什么是Python</h1>
<p>Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。</p>
<h1 id="三解释型语言和编译型语言的区别">三、解释型语言和编译型语言的区别</h1>
<p>我们编程都是用的高级语言,计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。翻译的方式有两种,一个是编译,一个是解释。</p>
<p>用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源高级程序编译成为机器语言文件。</p>
<p>解释型语言没有严格编译汇编过程,由解释器将代码块按需要变运行边翻译给机器执行。因此解释型语言一度存在运行效率底,重复解释的问题。但是通过对解释器的优化!可以提高解释型语言的运行效率。Python就属于这一种编程语言。<br>
<img src="https://img2018.cnblogs.com/blog/1391592/201911/1391592-20191105162742570-306761381.png" alt="" loading="lazy"></p>
<h1 id="四python运行原理概述">四、Python运行原理概述</h1>
<p>Python是解释型语言,没有严格意义上的编译和汇编过程。但是一般可以认为编写好的python源文件,由python解释器翻译成以.pyc为结尾的字节码文件。pyc文件是二进制文件,可以由python虚拟机直接运行。</p>
<p><em>注:有的朋友可能会问,为什么我运行python,有时候生成pyc文件,有时候没有呢?Python在执行import语句时,将会到已设定的path中寻找对应的模块。并且把对应的模块编译成相应的PyCodeObject(python中的一个类)中间结果,然后创建pyc文件,并将中间结果写入该文件。然后,Python会import这个pyc文件,实际上也就是将pyc文件中的PyCodeObject重新复制到内存中。而被直接运行的python代码一般不会生成pyc文件。</em></p>
<p>加载模块时,如果同时存在.py和.pyc,Python会尝试使用.pyc,如果.pyc的编译时间早于.py的修改时间,则重新编译.py并更新.pyc。</p>
<h1 id="五综述">五、综述</h1>
<p>通过上面的描述,我们知道python在整个运行过程中主要涉及源码xxx.py,编译好的文件xxx.pyc两类文件。其中xxx.pyc是可以由虚拟机直接执行的,是python将目标源码编译成字节码以后再磁盘上的文件形式。</p><br><br>
来源:https://www.cnblogs.com/blili/p/11799398.html
頁:
[1]