我最近从源代码构建了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);
}
答案 0 :(得分:3)
如果查看crypto/bn/bn_ctx.c
文件,可以看到消息是BN_CTX_DEBUG
预处理程序指令的结果。
默认情况下禁用。您使用哪个命令配置OpenSSL构建?如果您只需要调试符号,请尝试./config -d
。
答案 1 :(得分:2)
我尝试使用
-UBN_CTX_DEBUG
标志进行配置。
打开Configure
。找到表格条目:
"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_CTX_DEBUG
。您应该将-g2
更改为-g3
,以便保留符号定义。
然后,./Configure debug
。
带有调试符号的Openssl [1.0.2]库
我发现最简单的方法就是....
首先,make clean && make dclean
整理并删除递归的makefile。
其次,打开Makefile.org
并将CFLAG= -O
更改为CFLAG= -Og -g3
(或CFLAG= -O0 -g3
,如果GCC 不支持-Og
)。
第三,打开Configure
并复制一个预先存在的配置目标(如linux-generic64
)。将其重命名为my-config
。删除与-Ox
和-gX
相关的任何内容(或在其中添加-Og -g3
)。同时删除-fomit-frame-pointer
。
第四,使用您的配置:
./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(主人)与Clang及其消毒剂相似。这是我的破解99-clang-sanitize.conf
尝试与您正在做的事情类似(修改CFLAGS
):
%targets = (
"darwin-sanitize-x86_64" => {
sys_id => "MACOSX",
# inherit_from => [ asm("x86_64_asm") ],
cc => "clang",
cflags => "-g3 -O1 -fPIC -Wall -fsanitize=undefined -fsanitize=address -arch x86_64 -DL_ENDIAN",
lflags => "-arch x86_64",
bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL",
thread_cflag => "-D_REENTRANT",
# perlasm_scheme => "osx64",
dso_scheme => "dlfcn",
# engines_obj => "e_padlock-x86_64.o"
},
"darwin-sanitize-i386" => {
sys_id => "MACOSX",
# inherit_from => [ asm("x86_asm") ],
cc => "clang",
cflags => "-g3 -O1 -fPIC -Wall -fsanitize=undefined -fsanitize=address -arch i386 -DL_ENDIAN",
lflags => "-arch i386",
bn_ops => "BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR",
thread_cflag => "-D_REENTRANT",
# perlasm_scheme => "osx32",
dso_scheme => "dlfcn",
# engines_obj => "e_padlock-x86.o"
},
);
答案 2 :(得分:1)
这些是我使用调试符号安装openssl-1.0.1l
并且没有额外信息时所遵循的确切步骤:
config -d
命令时,输出的最后一行显示为debug-linux-elf配置。在Configure
文件中,我通过删除-DBN_CTX_DEBUG
更改了 debug-linux-elf 的表条目。 -g
标志。 ./config -d
make
make test
sudo make install
。 问题似乎已得到解决。谢谢@jww的答案。