2010-02-07 77 views
7

我想創建一個python腳本,它將反彙編一個二進制文件(一個Windows exe文件是精確的)並分析它的代碼。 我需要能夠採取一定的緩衝區,並提取某種結構包含有關其中的說明信息。用python反彙編 - 沒有簡單的解決方案?

我以前在C中使用libdisasm,並且發現它的界面非常直觀和舒適。 問題是,它的Python接口只能通過SWIG獲得,並且我無法在Windows下正確編譯它。

在可用性方面,diStorm提供了一個很好的開箱即用接口,但它僅提供每條指令的助記符,而不是具有定義指令類型和不指定枚舉類型的二進制結構。 這對我的目的來說很不舒服,而且需要很多我看到的花費時間來包裝界面以使其適合我的需求。我也看過BeaEngine,它實際上提供了我需要的輸出,一個包含有關每條指令的二進制信息的結構,但是它的接口非常奇怪,反直覺,並且在提供時會立即崩潰有錯誤的論據。 CTypes的最終死亡到你的python崩潰。

所以,我很樂意聽到其他的解決方案,比用djgcc或mingw製作SWIGed libdisasm或者爲diStorm編寫OOP包裝要花費的時間更少。 如果有人對如何編譯SWIGed libdisasm或更好的編譯二進制文件(pyd或dll + py)有一些指導,我很樂意聽到/收到它。 :)

提前感謝。

回答

2

好吧,經過很多幹預後,我設法編譯SWIGed libdisasm! 不幸的是,它似乎崩潰python不正確的(有時是正確的)使用。 我怎麼做的:

  1. 我編譯libdisasm.lib使用Visual Studio 6,你需要的唯一的事情是在你使用哪個libdisasm版本的源代碼,並stdint.h和inttypes.h(該Visual C++兼容版本,谷歌它)。
  2. 我SWIGed給定libdisasm_oop.i文件使用下面的命令行

    痛飲-python -shadow -o x86disasm_wrap.c -outdir。 libdisasm_oop.i

  3. 用Cygwin在libdisasm根目錄下運行./configure。你從這個得到的唯一真實的東西是config.h中

  4. 然後我創建了一個新的DLL項目,添加x86disasm_wrap.c它,增加了C:\ PythonXX \庫和C:\ PythonXX \文件夾包含到相應的變量,設置爲釋放配置(重要的是這個或者在包含python.h之前執行#undef _DEBUG)。 另外,您可能需要修改config.h的路徑。

  5. 編譯該DLL項目,並命名爲輸出_x86disasm.dll。 將它放在與SWIG生成的x86disasm.py相同的文件夾中,然後就完成了。

對於python的其他較不崩潰的disasm庫的任何建議?

2

您可能會嘗試使用ctypes與libdisasm直接接口,而不是通過SWIG圖層。這可能需要更多的開發時間,但AFAIK您應該能夠使用ctypes訪問底層功能。

相關問題