我正在尝试编写一个可以解析核心转储文件的C程序.我的问题是,如何在C中获取导致核心转储的地址?我知道可以从这个答案中使用gdb获取地址:
但我想直接在C中检索地址.任何信息都将受到高度赞赏.谢谢!
注意:我知道如何将核心转储解析为精灵.但我不知道如何获得导致段错误的地址.
我在 Fedora 系统上设置了“ulimit -c unlimited”,以便段错误生成核心转储文件。这是有效的。
我在这些 URL 上看到过 NT_FILE 注释:
但我的核心文件只包含这些注释:
$ 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)