ELF核心文件格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELF核心文件格式相关的知识,希望对你有一定的参考价值。

如果没有挖掘GDB源代码,我在哪里可以找到有关用于创建核心文件的格式的文档?

ELF规范使核心文件格式保持打开状态,所以我想这应该是GDB规范的一部分!遗憾的是,我没有从GNU的gdb文档中找到任何帮助。

这就是我要做的事情:将虚拟地址映射到包含正在运行的进程的可执行文件/库中的函数名称。为此,我首先要从核心文件中找出从虚拟地址空间到可执行文件/库的名称的映射,然后深入到相关文件中以获取符号信息。

现在'readelf -a core'告诉我核心文件中的几乎所有段都是'load'类型 - 我猜这些是来自所有参与文件的.text和.bss / .data段,加上堆栈段。除了这些加载段,有一个音符段,但似乎不包含地图。那么关于哪个文件段对应的信息如何存储在核心文件中?这些“加载”段是否以特定方式格式化以包含文件信息?

答案

gdbbfd等使用的gdb库不同的是binutils

另一答案

核心转储文件格式使用ELF格式,但未在ELF标准中描述。 AFAIK,对此没有权威性的参考。

那么关于哪个文件段对应的信息如何存储在核心文件中?

ELF注释中包含许多额外信息。你可以使用readelf -n来查看它们。

CORE / NT_FILE注释定义了内存地址范围和文件(+ offset)之间的关联:

Page size: 1
             Start                 End         Page Offset
0x0000000000400000  0x000000000049d000  0x0000000000000000
    /usr/bin/xchat
0x000000000069c000  0x00000000006a0000  0x000000000009c000
    /usr/bin/xchat
0x00007f2490885000  0x00007f24908a1000  0x0000000000000000
    /usr/share/icons/gnome/icon-theme.cache
0x00007f24908a1000  0x00007f24908bd000  0x0000000000000000
    /usr/share/icons/gnome/icon-theme.cache
0x00007f24908bd000  0x00007f2490eb0000  0x0000000000000000
    /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf
[...]

对于每个线程,你应该有一个CORE/NT_PRSTATUS注释,它给你线程的寄存器(包括堆栈指针)。您可能能够从中推断出堆栈的位置。

有关ELF核心文件格式的更多信息:

另一答案

核心转储是崩溃时进程的内存映像。它包括程序段,堆栈,堆和其他数据。您仍然需要原始程序才能理解内容:符号表和其他数据使存储器映像中的原始地址和结构有意义。

另一答案

有关生成核心文件的过程的其他信息存储在ELF注释部分中,尽管是以特定于操作系统的方式。例如,请参阅core(5) manual page以获取NetBSD

另一答案

解决问题的一个更简单的方法可能是解析/ proc / $ pid / maps中的文本,以确定给定虚拟地址映射到的文件。然后,您可以解析相应的文件。

Kenshoto的开源VDB(调试器)使用这种方法,如果你能读懂python就是一个很好的例子。

以上是关于ELF核心文件格式的主要内容,如果未能解决你的问题,请参考以下文章

ELF文件格式简介

ELF文件格式简介

手写ELF结构解析工具

C++学习(三九五)ELF类型文件

实践四

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段