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,執行完後就能使用。