相关疑难解决方法(0)

使用C获取从核心转储导致分段错误的地址

我正在尝试编写一个可以解析核心转储文件的C程序.我的问题是,如何在C中获取导致核心转储的地址?我知道可以从这个答案中使用gdb获取地址:

我怎样才能让GDB告诉我哪个地址导致了段错?

但我想直接在C中检索地址.任何信息都将受到高度赞赏.谢谢!

注意:我知道如何将核心转储解析为精灵.但我不知道如何获得导致段错误的地址.

c coredump elf

13
推荐指数
2
解决办法
2756
查看次数

为什么我的核心转储缺少 NT_FILE 注释?

我在 Fedora 系统上设置了“ulimit -c unlimited”,以便段错误生成核心转储文件。这是有效的。

我在这些 URL 上看到过 NT_FILE 注释:

ELF核心文件格式

ELF 核心文件剖析

但我的核心文件只包含这些注释:

$ readelf --notes core.simple.11

Notes at offset 0x000003f8 with length 0x00000558:
  Owner     Data size   Description
  CORE      0x00000150  NT_PRSTATUS (prstatus structure)
  CORE      0x00000088  NT_PRPSINFO (prpsinfo structure)
  CORE      0x00000130  NT_AUXV (auxiliary vector)
  CORE      0x00000200  NT_FPREGSET (floating point registers)
Run Code Online (Sandbox Code Playgroud)

为什么没有NT_FILE注释? 如何找出核心文件可能基于的各种目标文件,更重要的是,如何找出这些文件映射到核心映像的虚拟地址?

如果没有 NT_FILE 注释中的地址映射信息,我不知道如何在目标文件的 DWARF 调试信息中执行代码地址查找。

核心文件中的程序头:

$ readelf --segments core.simple.11

Elf file type is CORE (Core file)
Entry point 0x0
There are 17 program headers, starting at offset …
Run Code Online (Sandbox Code Playgroud)

gdb coredump fedora dwarf

3
推荐指数
1
解决办法
1366
查看次数

标签 统计

coredump ×2

c ×1

dwarf ×1

elf ×1

fedora ×1

gdb ×1