天天看點

Python從記憶體中使用編譯後的子產品

  在Windows程式設計的時候,有些時候,我們經常會要使用一些非正常的方法,比如說從記憶體中加載DLL,然後使用DLL中的函數。于是就思索在用Python的時候是否能夠将幾個編譯好的Pyc合并成一個,然後使用動态的讀取這個檔案,然後根據标記進行劃分,獲得不同的子產品的pyc内容,然後動态作為一個新的子產品引用到我們的程式中去,這就涉及到一個問題,如何将一個pyc整到記憶體,然後從記憶體中擷取變成一個新子產品進行引入處理。之後找了一些資料之後,發現一種方法,就是通過PyCodeObject這個代碼對象來進行處理,也就是用compile編譯之後的内容,然後讀取形成codeobject對象,然後用types.ModuleType建立一個新的子產品,然後将這個新子產品加入到sys.modules字典中去,之後在這這個建立的子產品環境中執行前面讀取的codeObject對象,那麼久可以使用這個新的導入子產品了,方式如下:

<a></a>

另外記錄一個外國的資料代碼如下

另外需要說明一下的是,使用Python import自動生成的編譯後的檔案一般都帶有魔數和時間戳,也就是說讀取codeObject的時候需要移動8位,但是有些用Python的API生成的不一定帶有這個魔數和時間戳的,那麼這個時候就不用移位,而直接讀取生成codeobject

本文轉自 不得閑 部落格園部落格,原文連結: http://www.cnblogs.com/DxSoft/p/3667290.html  ,如需轉載請自行聯系原作者