1. 程式人生 > >OPENSSL VS環境下原始碼除錯

OPENSSL VS環境下原始碼除錯

版本為 openssl-0.9.8x 原始碼,因為這個庫極為龐大複雜,要具體去了解它,單步除錯檢視是必不可少的。

原始碼在手,卻不能和之前的一些專案樣,直接將原始碼放入到VS IDE環境進行編譯,畢竟這不是土生土長的微軟的東西。

現在需要在VS 2008進行單步檢視和除錯,因此需要對openssl進行DEBUG版的編譯,網上很多的教程都是編譯的Release版本,要編譯DEBUG,需要小小的做些改動。


編譯步驟:

準備工作,需要有Perl環境以及openssl原始碼。

1. 先執行VS的CMD命令列,然後進入對應的原始碼目錄,執行 perl configure VC-WIN32


2. ms\do_ms.bat  (如果是想修改成DEBUG版,安裝下面步驟可進行修改,否則直接執行即可)

在openssl-0.9.8x找到 ms\do_ms.bat 進行編輯(或者新建一個do_ms_debug.bat檔案也可),將ntdll.mak 和 nt.mak 所在行加入 debug 即可。  這個版本的ntdll.mak 和 nt.mak都不用改動,即使改動後,在執行 ms\do_ms.bat都會被重新建立mak檔案。

修改前如圖:

修改後如圖:

進入到 openssl-0.9.8x 根目錄,然後執行 ms\do_ms.bat ,會產生對應的nt.mak 和 ntdll.mak ,如果是使用靜態庫,就編譯nt.mak ,動態庫是 ntdll.mak。

編譯方式是  nmake -f ms\ntdll.mak  or nmake -f ms\nt.mak  

測試庫是  nmake -f ms\ntdll.mak test  or nmake -f ms\nt.mak test

安裝庫檔案是  nmake -f ms\ntdll.mak install  or  nmake -f ms\nt.mak install (這個步驟一般不用執行,執行後會在原始碼所在目錄的根路徑下新建 E:\usr\local\ssl\ 目錄,然後庫,標頭檔案都被複制到這裡) 如:

清除編譯     nmake -f ms\ntdll.mak clean  or  nmake -f ms\nt.mak clean

修改do_ms.bat為debug版後,所對應的nt.mak 或者是 ntdll.mak 發生的改變僅僅是一些 CFLAG ,LFLAGS引數,如CFLAG =  /MTd /Od -DDEBUG -D_DEBUG 。。。

LFLAGS = 。。。 /debug

借鑑於網上的一篇教程,也是單步除錯設定的,但我做實驗時貌似有些出入,按照其手動修改 nt.mak 和 ntdll.mak 新加入 /Zi ,貌似是沒有作用的,因為該檔案在執行do_ms.bat後,會被重寫。 文章地址為: 點選開啟連結


當編譯完成後,會在根目錄下生成 對應的,如 out32dll  out32dll.dbg  out32.dbg  out32等目錄,前兩個是動態連結庫,後者則是靜態庫。

3.  開啟VS環境,設定一下VC++目錄,“工具” -- “選項” -- “專案和解決方案” -- “VC++ 目錄”,選擇“包含檔案”,指定 openssl-0.9.8x的include。“庫檔案”則指向生成的out32.dbg或者是out32.dll之類的都行,但如果是想跟蹤原始碼,則應該使用out32.dbg。



4. 建立測試專案,如命令列程式,在檔案中加入 標頭檔案,庫等就可以進入原始碼除錯了,如:

至此,編譯及單步除錯都已經實現。

如果不是想進行單步除錯,則可簡單使用已經編譯好的openssl庫即可,如: Win32OpenSSL-0_9_8x.exe,執行完後就能使用。