核心转储本身是可执行的吗?

sun*_*ica 6 unix linux executable coredump executable-format

Core转储上的维基百科页面说

在类Unix系统中,核心转储通常使用标准的可执行映像格式:

a.out in older versions of Unix,
ELF in modern Linux, System V, Solaris, and BSD systems,
Mach-O in OS X, etc.
Run Code Online (Sandbox Code Playgroud)

这是否意味着核心转储本身是可执行的?如果没有,为什么不呢?

编辑:由于@ WumpusQ.Wumbley coredump_filter在评论中提到了一个问题,或许上面的问题应该是:是否可以生成核心转储,使其可以自行执行?

Ree*_*eed 6

在较旧的unix变体中,默认情况下包括文本以及核心转储中的数据,但它也以a.out格式而不是ELF给出.今天的默认行为(在Linux中肯定,不是100%确定BSD变体,Solaris等)是在没有文本部分的情况下以ELF格式进行核心转储,但是可以改变这种行为.
但是,如果没有一些帮助,则无法在任何情况下直接执行核心转储.原因是简单的核心文件中缺少两个东西.一个是入口点,另一个是将CPU状态恢复到转储发生时或转储发生前的状态的代码(默认情况下也缺少文本部分).
在AIX中,曾经有一个名为undump的实用程序,但我不知道它发生了什么.它在我所知道的任何标准Linux发行版中都不存在.如上所述(@WumpusQ),还有一个针对上述注释中提到的Linux类似项目的尝试,但是该项目不完整,并且不会将CPU状态恢复到原始状态.但是,在某些特定的调试案例中,它仍然足够好.
还值得一提的是,还存在其他不能执行的ELF格式文件,这些文件不是核心文件.如目标文件(编译器输出)和.so(共享对象)文件.那些在运行之前需要一个链接阶段来解析外部地址.