我想在MacOS上调试OpenSSL,看看它是如何创建椭圆曲线点的。因此,我用调试符号编译了OpenSSL,但没有进行优化。但是,当我用lldb
运行时,它不起作用
$ cat ec.c
#include <crypto/ec.h>
#include <stdio.h>
int main() {
EC_GROUP *group = EC_GROUP_new_by_curve_name(NID_secp384r1);
EC_POINT *point = EC_POINT_new(group);
printf("done!\n");
return 0;
}
下面是我编译和运行程序的过程:
$ gcc ec.c -o ec -I../openssl/include ../openssl/libcrypto.dylib -ggdb3 -O0
$ DYLD_INSERT_LIBRARIES=../openssl/libcrypto.dylib ./ec
done!
下面是运行lldb并尝试在main中断时发生的情况:
$ lldb ./ec
(lldb) process launch --environment DYLD_INSERT_LIBRARIES=../openssl/libcrypto.dylib ./ec
Process 3948 launched: '/Users/seanthomas/repos/ec/ec' (arm64)
Process 3948 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=1, subcode=0x4a03000)
frame #0: 0x00000001009651a8 libcrypto.3.dylib`_armv8_sve_probe
libcrypto.3.dylib`:
-> 0x1009651a8 <+0>: eor z0.d, z0.d, z0.d
0x1009651ac <+4>: ret
libcrypto.3.dylib`:
0x1009651b0 <+0>: xar z0.d, z0.d, z0.d, #0x20
0x1009651b4 <+4>: ret
Target 0: (ec) stopped.
(lldb)
有人知道怎么解决这个问题吗?
2条答案
按热度按时间bsxbgnwa1#
我不知道这是否能帮助你。但是也许,Arm arch上的libcrypto.3.dylib有bug。
我也遇到了这个问题。当我在shell中通过cmd行运行程序时它工作正常。但是当我想在VSCode中使用lldb调试这个程序时它遇到了这个问题。
然而,当我删除libcrypto.3.dylib和libssl.3.dylib,使用标签OpenSSL_1_1_1m构建openssl,并重建程序时,它工作了!
5gfr0r5j2#
是的,确认Mac M1/M2上的问题。恢复到旧版本的openssl,问题得到了修复。我在我的MacOs应用程序中使用openssl lib,在调试模式下启动应用程序时,它马上崩溃。