首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调用指令之后跳到“`SignalHandler`”中

在调用指令之后跳到“`SignalHandler`”中
EN

Stack Overflow用户
提问于 2022-03-01 12:21:45
回答 1查看 23关注 0票数 0

我正在对一个报告如下的程序进行调试:

代码语言:javascript
复制
Thread 1 "test.out" received signal SIGSEGV, Segmentation fault.

然后,我对程序进行了跟踪,发现程序在调用指令SignalHandler后立即跳入call 0x401950函数。

我测试了呼叫目的地rax、rdi和rsi (呼叫输入)。但是没有什么奇怪的发现。

我以前没有遇到过这种情况,我想是由于一些豁免而产生的一个软中断,然后排在指令之后。所以实际的问题可能会更早发生。

现在我需要找出豁免的来源,这样我才能解决这个问题。但我不知道怎么做。

所以我来问是否有人能帮我这个忙。

很抱歉没有显示代码,因为它是公司的资产……

感谢任何人的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-01 16:19:26

然后,我对程序进行了

处理,发现程序在调用指令调用0x401950之后就跳入了一个SignalHandler函数。

你没有说你使用的是哪个处理器和操作系统。猜测Linux和x86_64,就会有堆栈溢出。

CALL指令将返回地址推送到堆栈上,如果堆栈耗尽,此操作将生成SIGSEGV

您可以通过使用(gdb) where (这可能会显示非常深的递归,尽管堆栈耗尽的其他原因也是可能的)和查看RSP的值(应该在页面边界以下)来证实这一猜测。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71308430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档