1. 程式人生 > >python中調用用C++寫的dll

python中調用用C++寫的dll

寫入 ddr 好的 工具 通過 逆向 可能 想要 32位

最近要逆向一個pyd文件,無意中要用到用boost庫生成的pyd文件,這其中的環境配置過程很漫長,特意將配置或者說安裝使用的過程記錄一下。python中使用C++生成的動態庫方法我知道的現在是兩種,(1)通過boost庫生成dll,然後改名成後綴名pyd給python使用,(2)通過python的ctypes庫直接加載dll文件使用。

先說一下第二種方式,這種比較簡單,不用怎麽配置環境,網上能搜到很多ctypes使用的方法,唯一需要註意的是,在32位的python使用32位的dll,64位的python中使用64位的dll,如果生成的dll在加載時老是提示找不到dll,是因為這個dll依賴於其它的dll,如果沒依賴自己寫的其他庫,則可能是VS的環境變量沒裝好,配置好環境變量或者重裝一遍VS。

著重說下第一種方式,過程如下:

1) 下載boost庫,下載時有壓縮文件格式,也有exe格式,我使用的壓縮文件格式;

2) 安裝boost庫:解壓縮,然後通過VS的開發工具命令提示(

Win鍵,然後從VS程序下選擇,想要生成32位的pyd文件,則選擇32位的工具,如果是生成64位的pyd文件,則選擇64位兼容的工具,VS2015下選擇VS2015 x86 x64 兼容工具命令提示符

)來運行bootstrap.bat腳本文件,會生成bjam.exe和b2.exe,其實二者是完全一樣的文件,運行其中一個即可,運行直到結束需要花至少20多分鐘,64位的更長,直接運行時,會將生成的文件全部放到bjam.exe當前目錄,當然也可以指定存放目錄,命令如下:

x86安裝則輸入命令:
b2.exe --prefix=D:\boost\x86 --build-type=complete --build-dir=build_tmp toolset=msvc-14.0 address-model=32 install
("D:\boost\x86"是將要生成32位的include和lib文件夾放置的位置,build_tmp是位於安裝包中用於放置中間生成物的文件夾)

x64安裝則輸入命令:
b2.exe --prefix=D:\Boost\x64 --build-type=complete --build-dir=build_tmp_x64 toolset=msvc-14.0 address-model=64 install

(msvc-14.0指的是一個平臺,這裏是VS2015, msvc-12.0是VS2013,什麽VS版本就指定什麽平臺)。

3)使用配置好的boost庫

用對應版本的VS創建一個dll工程,在其中寫入一些使用boost庫的代碼,網上很多,這裏就不再記錄。加入代碼後,直接運行會報各種錯的,因為找不到頭文件和鏈接庫,所以要在:項目——屬性——C/C++——常規中的附加庫目錄中加入***\Python36\include和 ***\boost_1_66_0目錄,項目——屬性——鏈接庫——常規——附加庫目錄中加入***\Python36\libs 和 D:\Boost\x64\lib(如果是直接運行b2.exe或者bjam.exe則是在當前目錄的\stage\lib目錄,如:E:\Program Files (x86)\boost_1_63_0\stage\lib)。雖然有些麻煩,但最後成功的那一下是很喜悅的。

python中調用用C++寫的dll