调用指令后立即跳转到“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
可能会解决此崩溃问题(尽管您确实应该通过其他机制解决根本原因)。
我正在对报告的程序进行调试:
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
可能会解决此崩溃问题(尽管您确实应该通过其他机制解决根本原因)。