我想从核心转储中检索可执行文件,并且用于获取此信息的任何Linux软件包的输出应在其输出中包含execfn
。
到目前为止,我尝试了以下操作:
$ file kms
kms: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '/test', real uid: 1000440000, effective uid: 1000440000, real gid: 0, effective gid: 0, execfn: '/test', platform: 'x86_64'
file
命令仅适用于特定的内核,并且不是通用解决方案,因为某些内核转储会提供以下输出。
$ file ss
ss: ELF 64-bit LSB core file x86-64, version 1 (SYSV), too many program header sections (6841)
gdb
命令并非对所有核心转储都以相同的方式起作用。使用gdb命令的输出不一致。 gdb命令为某些核心转储接收的输出与strings
命令不同。
$gdb kms
Core was generated by `/test'.
我什至尝试过strings
程序包,但我认为它提供了正确的输出,但是格式不包含execfn
以便在解决方案中使用它
$ strings kms | grep ^/ | tail -1
/test
任何人都可以建议任何Linux软件包来帮助我从核心转储中检索可执行文件,该文件的输出中包含execfn
。
如果ELF可执行文件(请参阅elf(5))是用DWARF调试信息构建的,则core
文件中应该有足够的信息。
DWARF调试信息是通过编译和链接程序获取的-如果程序是使用GCC(或Clang)编译的,则使用最新的gcc
,g++
,gfortran
,[ C0],clang
命令-clang++
with(或-g
....)标志。
注意-g2
。您可能需要使用GNU setrlimit(2)的ulimit
内置文件(请参阅bash
和bash(1) ...),或使用documentation of GNU bash的limit
内置文件来增加zsh
大小文件的限制。
如果您的交互式Unix shell是zsh
(例如core
)的其他内容,请务必阅读其文档。