美文网首页
Linux环境下OpenSSL的调试debug方法

Linux环境下OpenSSL的调试debug方法

作者: 攻城老狮 | 来源:发表于2020-02-15 16:54 被阅读0次

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

    相关文章

      网友评论

          本文标题:Linux环境下OpenSSL的调试debug方法

          本文链接:https://www.haomeiwen.com/subject/vwcyfhtx.html