首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GDB如何在NASM中获取退出时的回溯?

GDB如何在NASM中获取退出时的回溯?
EN

Stack Overflow用户
提问于 2020-04-16 06:44:21
回答 1查看 115关注 0票数 0

GDB中的回溯在NASM中比在C中受到更多的限制,但我通常在程序体中看到这种类型的回溯:

代码语言:javascript
运行
复制
#0  set_data () at ProgramName.asm:863
#1  0x0000000000000000 in ?? ()

我有一个双核程序(每个核分配给一个不同的任务)和最后一个退出时的核心段错误(ret)。在这一点上,我看到的bt (回溯)是:

代码语言:javascript
运行
复制
(gdb) bt
#0  0x0000000000000100 in ?? ()
#1  0x0000000000000000 in ?? ()

这是在NASM中的--我想C会给我更多的信息。我的问题是,如何从程序中查看更多信息,以便在退出(ret)时调试段故障。在段故障发生时,另一个线程(核心)已经退出,这是线程的状态:

代码语言:javascript
运行
复制
(gdb) info threads
  Id   Target Id         Frame
  1    Thread 0x7ffff7fea740 (LWP 22160) "Call_Create_Thr"  0x00007ffff6ff3d2d in __GI___pthread_timedjoin_ex   (threadid=140737126745856, thread_return=0x0,
    abstime=0x0, block=<optimized out>) at  pthread_join_common.c:89

* 3    Thread 0x7fffea724700 (LWP 22165) "Call_Create_Thr"  0x0000000000000100 in ?? ()

我需要看看Thread 3(0x7fffe724700)在哪里有段错误。bt没有透露足够的信息。

一个问题是堆栈损坏。在这个程序中,我在堆栈中存储了一些变量;我从sub rsp,64开始,以add rsp,64结束,所以这应该会处理堆栈,但这可能与退出时的sefault和缺乏回溯信息有关。

如何使用回溯查看更多信息,其中我在NASM中退出时出现了段错误?

EN

回答 1

Stack Overflow用户

发布于 2020-04-16 09:50:17

我需要查看线程3(0x7fffe724700)的段错误。

$rip获得值0x100时,它会分段。如果没有MCVE,我们就不能知道代码是如何结束的。

在程序退出(ret)时调试段错误。

Exit和ret(urn)不是一回事。当任务创建时没有调用者时,您是否返回给调用者?

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

https://stackoverflow.com/questions/61239845

复制
相关文章

相似问题

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