调用指令后立即跳转到“SignalHandler”

Jump into `SignalHandler` right after a call instruction

我正在对报告的程序进行调试:

Thread 1 "test.out" received signal SIGSEGV, Segmentation fault.

然后我 gdbed 程序,发现程序在调用指令 call 0x401950.

后立即跳转到 SignalHandler 函数

我测试了调用目的地rax、rdi和rsi(调用的输入)。不过没发现什么奇怪的。

我以前没遇到过这种情况,我猜是由于一些豁免产生了一个软中断,然后在指令之后调度。所以实际问题可能更早出现。

现在我需要找出免税额在哪里,以便我可以解决它。但是我不知道怎么做。

所以我来问问有没有人可以帮助我。

非常抱歉没有显示代码,因为它是公司资产......

感谢所有帮助过的人!!!

I then gdbed the program and found out that the program jump into a SignalHandler function right after a call instruction call 0x401950.

您没有说明您使用的是哪个处理器和 OS。猜测 Linux 和 x86_64,你有堆栈溢出。

CALL指令将return地址压入堆栈,如果您的堆栈耗尽,此操作将生成SIGSEGV

您可以通过使用 (gdb) where(这很可能显示出非常深的递归,尽管堆栈耗尽的其他原因也是可能的)并查看 RSP 的值来确认这个猜测(应该刚好低于页面边界)。

根据堆栈大小的设置方式,在调用程序之前使用 ulimit -s unlimited 可能会解决此崩溃问题(尽管您确实应该通过其他机制解决根本原因)。