最近,由于项目需求。需要使用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的方法,希望对读者能有帮助。
网友评论