gpt4 book ai didi

linux - 确定在 GDB 下导致 SIGSEGV 的 CPU 陷阱?

转载 作者:太空宇宙 更新时间:2023-11-04 09:33:06 25 4
gpt4 key购买 nike

我有一个在库代码中 SIGSEGV 的程序。查看导致 SIGSEGV 的语句(见下文)时,我并没有感到惊讶。但是代码使用了 Intel 的 AES-NI,我对它不是很熟悉。

我发出了 handle all 以希望捕获导致 SIGSEGV 的陷阱,但程序仍然只是崩溃而不是告诉我陷阱。

如何让 GDB 显示导致 SIGSEGV 的 CPU 陷阱?


Program received signal SIGSEGV, Segmentation fault.
0x00000000004ddf0b in CryptoPP::AESNI_Dec_Block(long long __vector&, long long __vector const*, unsigned int) (block=..., subkeys=0x7fffffffdc60, rounds=0x0)
at rijndael.cpp:1040
1040 block = _mm_aesdec_si128(block, subkeys[i+1]);
(gdb) p block
$1 = (__m128i &) @0x7fffffffcec0: {0x2e37c840668d6030, 0x431362358943e432}
(gdb) x/16b 0x7fffffffcec0
0x7fffffffcec0: 0x30 0x60 0x8d 0x66 0x40 0xc8 0x37 0x2e
0x7fffffffcec8: 0x32 0xe4 0x43 0x89 0x35 0x62 0x13 0x43

最佳答案

How can I get GDB to display the CPU trap that's causing the SIGSEGV

你不能:GDB 看不到陷阱,只有操作系统可以。

你能看到的是导致陷阱的指令:

(gdb) x/i $pc

问题很可能是对齐。我不知道 long long __vector 是什么,但如果它不是 16 字节的实体,那么 subkeys[i+1] 就不会是 16 字节的对齐,这对 _mm_aesdec_si128 来说是个问题,因为它需要两个参数都进行 16 字节对齐。

关于linux - 确定在 GDB 下导致 SIGSEGV 的 CPU 陷阱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29463225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com