最近抚垄,由于項目需求躏鱼。需要使用OpenSSL提供的接口完成一些工作氮采。而debug程序過程中,編譯器無法進入其函數(shù)內(nèi)部染苛,而會直接跳過該函數(shù)鹊漠。這給學習和深入了解其接口帶來不便。通過本文茶行,讀者可以實現(xiàn)進入OpenSSL接口內(nèi)部的需求躯概。
參考:
https://www.cnblogs.com/405845829qq/p/8717571.html
https://cloud.tencent.com/developer/article/1468839
https://github.com/jzysheep/Youtube
1.下載OpenSSL
首先,我們需要在Github上面下載OpenSSL畔师。使用clone和下載zip均可娶靡。我這里使用下載zip文件的方式。
# 方法1 直接clone
cd ~/
git clone https://github.com/openssl/openssl.git
cd openssl/
# 方法2 download zip文件
unzip openssl-master.zip
cd openssl-master/
2. 安裝靜態(tài)庫
在下載后的目錄中執(zhí)行如下操作看锉,安裝靜態(tài)庫版本姿锭。
./config --prefix=/usr/local --openssldir=/usr/local/ssl
make && sudo make install
3. 安裝動態(tài)庫
安裝目錄為/usr/local下。安裝動態(tài)庫時增加-d選項伯铣,調(diào)試時使用動態(tài)庫呻此,達到跟蹤代碼的需求。
./config -d shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && sudo make install
4. 加入動態(tài)鏈接庫的路徑
注:執(zhí)行此操作需要root身份
su - root
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig -v
5. 調(diào)試程序
至此腔寡,全部安裝工作結(jié)束焚鲜。下面我們來看一下是否達成進入OpenSSL函數(shù)內(nèi)部的效果。
以下程序是調(diào)用OpenSSL的相關(guān)函數(shù),實現(xiàn)MD5哈希散列算法的程序恃泪。
#include<stdio.h>
#include<openssl/md5.h>
#include<string.h>
int main( int argc, char **argv )
{
MD5_CTX ctx;
unsigned char *data="123";
unsigned char md[16];
char buf[33]={'\0'};
char tmp[3]={'\0'};
int i;
MD5_Init(&ctx);
MD5_Update(&ctx,data,strlen(data));
MD5_Final(md,&ctx);
for( i=0; i<16; i++ ){
sprintf(tmp,"%02X",md[i]);
strcat(buf,tmp);
}
printf("%s\n",buf);
return 0;
}
我們在終端輸入如下命令將程序編譯郑兴,然后使用gdb調(diào)試程序
gcc md5.c -o md5 -ggdb -lcrypto -lssl
gdb md5
進入gdb后犀斋,輸入
start
開啟debug贝乎,之后輸入layout src
查看代碼窗口,輸入n
單步運行到OpenSSL函數(shù)處叽粹,輸入s
發(fā)現(xiàn)可以進入OpenSSL函數(shù)內(nèi)部览效,說明已經(jīng)成功給OpenSSL配置debug功能。總結(jié):本文提供了安裝具有調(diào)試debug功能的OpenSSL的方法虫几,希望對讀者能有幫助锤灿。