调试修改后的OpenSSL

时间:2018-02-20 09:27:34

标签: c openssl

我想修改OpenSSL代码,然后在我的IDE(QTCreator)中调试它。

我已经下载了OpenSSL源代码,根据./config使用调试符号构建它,并将其部署在非系统文件夹中。但是,当我对库进行修改时,更改在调试程序中无效。

例如,我尝试修改握手过程并使用s_client应用测试结果。然而,s_client app指向OpenSSL的系统版本。即,s_client包含<openssl/...>(位于/usr/local/...)。

我希望它指向openssl在不同文件夹中的刚安装/修改版本。虽然有一个问题。通过修改原始的OpenSSL makefile,我只想到了一个怎么做的方法,这个方法很庞大,而且任务看起来势不可挡。

有谁知道如何处理这个问题?请注意,我希望保持OpenSSL的系统版本可操作(符号链接不适用)。

我运行Ubuntu 16.04 LTS。 ldd /my/version/of/openssl的输出是

linux-vdso.so.1 =>  (0x00007ffd9a3d6000)
    libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f04523f8000)
    libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f0451f6a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0451d4d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0451983000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f045177f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f0452668000)

1 个答案:

答案 0 :(得分:0)

在两个人的帮助下(见评论),我能够找出问题所在。首先,确保编译OpenSSL并正确设置--prefix--openssl目录。

安装OpenSSL后,您需要使用代码(OpenSSL的应用)来调用/链接新版本的OpenSSL。在QtCreator中,您可以通过将LD_LIBRARY_PATH设置为包含库文件libcrypto.so.1libssl.so.1的目录来实现此目的。该设置在Projects -> Run environment -> (add LD_LIBRARY_PATH into system environment)

中完成

此外,您可以通过从终端输入带二进制文件和调用命令ldd ./openssl的目录来手动检查二进制文件所调用的库。这样,您将看到调用哪些库(它应该是您自己的版本,而不是系统库)。此外,您可以从终端设置LD_LIBRARY_PATH,可选地在其前面设置export命令,以实现永久效果(持久的整个终端会话)。总的来说,你可以打电话

export LD_LIBRARY_PATH=/path/to/your/lib