为什么LLDB在MacOS上使用用户编译的库生成EXC_BAD_INSTRUCTION?

8fsztsew  于 2022-12-11  发布在  Mac
关注(0)|答案(2)|浏览(209)

我想在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)

有人知道怎么解决这个问题吗?

bsxbgnwa

bsxbgnwa1#

我不知道这是否能帮助你。但是也许,Arm arch上的libcrypto.3.dylib有bug。
我也遇到了这个问题。当我在shell中通过cmd行运行程序时它工作正常。但是当我想在VSCode中使用lldb调试这个程序时它遇到了这个问题。
然而,当我删除libcrypto.3.dylib和libssl.3.dylib,使用标签OpenSSL_1_1_1m构建openssl,并重建程序时,它工作了!

5gfr0r5j

5gfr0r5j2#

是的,确认Mac M1/M2上的问题。恢复到旧版本的openssl,问题得到了修复。我在我的MacOs应用程序中使用openssl lib,在调试模式下启动应用程序时,它马上崩溃。

相关问题