Linux环境下OpenSSL的调试debug方法

最近,由于项目需求。需要使用OpenSSL提供的接口完成一些工作。而debug程序过程中,编译器无法进入其函数内部,而会直接跳过该函数。这给学习和深入了解其接口带来不便。通过本文,读者可以实现进入OpenSSL接口内部的需求。

参考:
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/

OpenSSL

###2. 安装静态库
在下载后的目录中执行如下操作,安装静态库版本。

./config --prefix=/usr/local --openssldir=/usr/local/ssl    
make && sudo make install 

###3. 安装动态库
安装目录为/usr/local下。安装动态库时增加-d选项,调试时使用动态库,达到跟踪代码的需求。

./config -d shared --prefix=/usr/local --openssldir=/usr/local/ssl    
make clean    
make && sudo make install

###4. 加入动态链接库的路径
注:执行此操作需要root身份

su - root 
echo "/usr/local/lib" >> /etc/ld.so.conf 
ldconfig -v

###5. 调试程序
至此,全部安装工作结束。下面我们来看一下是否达成进入OpenSSL函数内部的效果。
以下程序是调用OpenSSL的相关函数,实现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调试程序

gcc md5.c -o md5 -ggdb -lcrypto -lssl
gdb md5

调试
进入gdb后,输入start开启debug,之后输入layout src查看代码窗口,输入n单步运行到OpenSSL函数处,输入s发现可以进入OpenSSL函数内部,说明已经成功给OpenSSL配置debug功能。
单步运行至接口处

进入OpenSSL内部

总结:本文提供了安装具有调试debug功能的OpenSSL的方法,希望对读者能有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城老湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值