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


一、前言

最近在學習Python逆向相關,涉及到python字節碼的閱讀,編譯及反匯編一些問題。經過長時間的學習有了一些眉目,為了方便大家交流,特地將學習過程整理,形成了這篇專題。專題對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將目標源碼編譯成字節碼以后再磁盤上的文件形式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM