Debugging 带有调试符号的Openssl库
我最近从源代码构建了Debugging 带有调试符号的Openssl库,debugging,openssl,static-libraries,Debugging,Openssl,Static Libraries,我最近从源代码构建了openssl-1.0.1l(带有调试符号)。我编写了一个C程序,它使用openssl库函数执行一些基本的加密。运行可执行文件时,它会将一些信息(如下所示)与结果一起显示到stdout Ending BN_CTX_start (0x9b03300): 008 001 001 001 : ^^^ ^^^ Starting BN_CTX_get (0x9b03300): 008 001 001 001 : ^^^ ^^^ Sta
openssl-1.0.1l
(带有调试符号)。我编写了一个C
程序,它使用openssl库函数执行一些基本的加密。运行可执行文件时,它会将一些信息(如下所示)与结果一起显示到stdout
Ending BN_CTX_start
(0x9b03300): 008 001 001 001
: ^^^ ^^^
Starting BN_CTX_get
(0x9b03300): 008 001 001 001
: ^^^ ^^^
Starting BN_CTX_end
(0x9b03300): 008 001 001 001 010
: ^^^ ^^^
Ending BN_CTX_end
(0x9b03300): 008 001 001 001
: ^^^
Starting BN_CTX_end
(0x9b03300): 008 001 001 001
: ^^^
Ending BN_CTX_end
(0x9b03300):
:
BN_CTX_free, stack-size=32, pool-bignums=16
dmaxs: 08 01 01 01 10 00 00 00 00 00 00 00 00 00 00 00
这些“额外”信息是什么?为什么要输出?有没有办法禁用它?我要求我的可执行文件只执行它打算执行的内容
这是代码的一部分。这段代码足以导致上述问题:
#include <openssl/ecdsa.h>
#include <openssl/obj_mac.h>
int main()
{
EC_KEY *keyPair = EC_KEY_new();
EC_GROUP *curve = EC_GROUP_new_by_curve_name(NID_sect163k1);
EC_KEY_set_group(keyPair, curve);
EC_KEY_generate_key(keyPair);
}
#包括
#包括
int main()
{
EC_KEY*keyPair=EC_KEY_new();
EC_组*曲线=EC_组新名称(NID_sect163k1);
EC_密钥集_组(密钥对、曲线);
EC_密钥_生成_密钥(密钥对);
}
如果查看crypto/bn/bn_ctx.c
文件,可以看到这些消息是bn_ctx_DEBUG
预处理器指令的结果
默认情况下,它处于禁用状态。您使用哪个命令配置OpenSSL构建?如果只需要调试符号,请尝试
/config-d
。如果查看crypto/bn/bn\u ctx.c
文件,可以看到消息是bn\u ctx\u DEBUG
预处理器指令的结果
默认情况下,它处于禁用状态。您使用哪个命令配置OpenSSL构建?如果只需要调试符号,请尝试/config-d
我尝试用
-UBN\u CTX\u DEBUG
标志配置它
打开配置。查找表条目:
"debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG
-DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes
-Wmissing-declarations -Werror::(unknown)::-lefence::::",
删除-DBN\u CTX\u DEBUG
。您可能应该将-g2
更改为-g3
,以便也保留符号定义
然后,/Configure debug
带有调试符号的Openssl[1.0.2]库
我发现最简单的方法是
首先,makeclean&&makedclean
整理和删除递归生成文件
其次,打开Makefile.org
并将CFLAG=-O
更改为CFLAG=-Og-g3
(或者CFLAG=-O0-g3
,如果GCC不支持-Og
)
第三,打开Configure
并复制一个预先存在的配置目标(如linux-generic64
)。将其重命名为类似于my config
。删除与-Ox
和-gX
相关的任何内容(或在此处添加-Og-g3
)。还可以删除诸如-fomit帧指针之类的内容
第四,利用您的配置:
./Configure my-config
make
make install
作为一种替代方法,选择一种开发人员预先配置的配置。例如,Ben Laurie是一名开发人员,您可以使用/Configure debug Ben no opt
。它是用-O0-g3
构建的
同样值得注意的是,Configure
中的配置表在OpenSSL Master中已经消失了(预期为1.1.0及更高版本)
取而代之的是一个Configurations
文件夹。在该文件夹中,您有像10 main.CONF
这样的CONF文件,其条目如下:
%targets = (
...
##### MacOS X (a.k.a. Darwin) setup
"darwin-common" => {
template => 1,
cc => "cc",
cflags => "",
debug_cflags => "-g -O0",
release_cflags => "-O3",
thread_cflag => "-D_REENTRANT",
sys_id => "MACOSX",
lflags => "-Wl,-search_paths_first%",
bn_ops => "BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR",
perlasm_scheme => "osx32",
dso_scheme => "dlfcn",
shared_target => "darwin-shared",
shared_cflag => "-fPIC -fno-common",
shared_ldflag => "-dynamiclib",
shared_extension => ".\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
},
...
"darwin-i386-cc" => {
inherit_from => [ "darwin-common", asm("x86_asm") ],
cflags => "-arch i386 -DL_ENDIAN",
release_cflags => "-O3 -fomit-frame-pointer",
bn_ops => "BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR",
perlasm_scheme => "macosx",
shared_ldflag => "-arch i386 -dynamiclib",
},
"darwin64-x86_64-cc" => {
inherit_from => [ "darwin-common", asm("x86_64_asm") ],
cflags => "-arch x86_64 -DL_ENDIAN -Wall",
bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL",
perlasm_scheme => "macosx",
shared_ldflag => "-arch x86_64 -dynamiclib",
},
);
事实上,我也遭受了类似的痛苦,但在1.1.0(master)版本中,我使用了叮当及其消毒液。这是我的坏掉的99 clangsanitize.conf
,它试图做与您正在做的类似的事情(修改CFLAGS
):
我尝试用-UBN\u CTX\u DEBUG
标志配置它
打开配置。查找表条目:
"debug", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG
-DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes
-Wmissing-declarations -Werror::(unknown)::-lefence::::",
删除-DBN\u CTX\u DEBUG
。您可能应该将-g2
更改为-g3
,以便也保留符号定义
然后,/Configure debug
带有调试符号的Openssl[1.0.2]库
我发现最简单的方法是
首先,makeclean&&makedclean
整理和删除递归生成文件
其次,打开Makefile.org
并将CFLAG=-O
更改为CFLAG=-Og-g3
(或者CFLAG=-O0-g3
,如果GCC不支持-Og
)
第三,打开Configure
并复制一个预先存在的配置目标(如linux-generic64
)。将其重命名为类似于my config
。删除与-Ox
和-gX
相关的任何内容(或在此处添加-Og-g3
)。还可以删除诸如-fomit帧指针之类的内容
第四,利用您的配置:
./Configure my-config
make
make install
作为一种替代方法,选择一种开发人员预先配置的配置。例如,Ben Laurie是一名开发人员,您可以使用/Configure debug Ben no opt
。它是用-O0-g3
构建的
同样值得注意的是,Configure
中的配置表在OpenSSL Master中已经消失了(预期为1.1.0及更高版本)
取而代之的是一个Configurations
文件夹。在该文件夹中,您有像10 main.CONF
这样的CONF文件,其条目如下:
%targets = (
...
##### MacOS X (a.k.a. Darwin) setup
"darwin-common" => {
template => 1,
cc => "cc",
cflags => "",
debug_cflags => "-g -O0",
release_cflags => "-O3",
thread_cflag => "-D_REENTRANT",
sys_id => "MACOSX",
lflags => "-Wl,-search_paths_first%",
bn_ops => "BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR",
perlasm_scheme => "osx32",
dso_scheme => "dlfcn",
shared_target => "darwin-shared",
shared_cflag => "-fPIC -fno-common",
shared_ldflag => "-dynamiclib",
shared_extension => ".\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
},
...
"darwin-i386-cc" => {
inherit_from => [ "darwin-common", asm("x86_asm") ],
cflags => "-arch i386 -DL_ENDIAN",
release_cflags => "-O3 -fomit-frame-pointer",
bn_ops => "BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR",
perlasm_scheme => "macosx",
shared_ldflag => "-arch i386 -dynamiclib",
},
"darwin64-x86_64-cc" => {
inherit_from => [ "darwin-common", asm("x86_64_asm") ],
cflags => "-arch x86_64 -DL_ENDIAN -Wall",
bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL",
perlasm_scheme => "macosx",
shared_ldflag => "-arch x86_64 -dynamiclib",
},
);
事实上,我也遭受了类似的痛苦,但在1.1.0(master)版本中,我使用了叮当及其消毒液。这是我的坏掉的99 clangsanitize.conf
,它试图做与您正在做的类似的事情(修改CFLAGS
):
以下是我安装openssl-1.0.1l
时所遵循的步骤,其中包含调试符号,不包含额外信息:
当我运行config-d
命令时,输出的最后一行显示为调试linux elf配置的。在Configure
文件中,我通过删除-DBN\u CTX\u debug
更改了debug linux elf的表项李>
我没有更改该特定表条目中的-g
标志李>
运行以下命令:
/config-d
make
进行测试
sudo make安装
李>
这个问题似乎已经解决了。感谢