1. 程式人生 > 實用技巧 >使用gdb除錯openssl

使用gdb除錯openssl

這篇文章是什麼?

最近在讀一篇論文,裡面的一項工作是找到了openssl中沒有能夠很好的設定constant-time的code path。

方法是通過在相應的函數出設定斷點,檢測genpkey命令時,是否呼叫了共享庫中的這幾部分非constant-time函式。

我其實不怎麼懂debug這一套,對gdb等工具只是略有了解,程式的編譯連結也不敢說很懂,就只是藉助一下參考,簡單嘗試下作者的方法

具體要怎麼做?

openssl的編譯安裝

原始碼獲取

openssl原始碼可以從官網下載zip或者從github clone,這裡選擇github,便於回退到相應的版本

clone

git clone https://github.com/openssl/openssl.git

切換分支到1.0.2版本

git checkout -b 1_0_2 origin/OpenSSL_1_0_2-stable

編譯安裝

./config --prefix="/home/username/debugopenssl"
make
sudo make install (安裝到config配置好的目錄中,以免影響到當前系統中的openssl)
sudo su
echo "/home/username/openssl/bin" >> /etc/ld.so.conf      //家加入動態連結庫的路徑
ldconfig -v

測試

在安裝目錄下的bin資料夾中,執行

./openssl version

不出現報錯且輸出版本資訊即安裝成功

操作

安裝gdb

如果你是debian/ubuntu/deepin使用者,直接

sudo apt install gdb

其他系統也有相應的安裝方式

上手

gdb ./openssl //在bin目錄下
(gdb)set args genpkey -algorithm RSA -out key.pem  //設定引數
(gdb)b bn_gcd.c:120 //新增斷點
(gcd)run //執行,觀察是否觸發斷點