什么是segfault rip/rsp编号以及如何使用它们

11 debugging segmentation-fault

当我的linux应用程序崩溃时,它会在日志中生成一行代码:

segfault at 0000000 rip 00003f32a823 rsp 000123ade323错误4

什么是rip和rsp地址?我如何使用它们来查明问题?它们对应于"objdump"或"readelf"输出中的某些内容吗?如果我的程序将其符号剥离出来(对于可以使用gdb使用的单独文件)它们是否有用

Goz*_*Goz 7

那么rip指针会告诉你导致崩溃的指令.您需要在地图文件中查找它.

在地图文件中,您将获得一系列功能及其起始地址.加载应用程序时,它将加载到基址.rip指针 - 基地址为您提供地图文件地址.然后,如果您在地图文件中搜索一个从略低于您的rip指针的地址开始的函数,并且在列表中,通过具有更高地址的函数,您可以找到崩溃的函数.

从那里你需要尝试识别你的代码中出了什么问题.它没有多大乐趣,但它至少可以为您提供一个起点.

编辑:"segfault at"位告诉你,我打赌,你已经取消引用了一个NULL指针.rsp是当前的堆栈指针.可能不是那么有用.通过内存转储,您"可能"能够更准确地找出您在函数中所处的位置,但实际上很难确定您在优化构建中的位置