linux下core文件被系统转存而不能直接找到

原因大概率是被系统转存了

1. 查看core_pattern

cat /proc/sys/kernel/core_pattern
 
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e

2. 使用coredumpctl命令列出core的进程信息

3. 使用coredumpctl取出文件

coredumpctl -o 自定义文件名 dump Pid

 

### Linux ELF文件格式结构详解 ELF(Executable and Linkable Format)是UNIX系统实验室开发的一种二进制文件格式,广泛应用于Linux系统中,用于表示可执行文件、目标代码、共享库和core转存文件[^4]。以下是ELF文件的主要结构组成及其功能: #### 1. ELF头(ELF Header) ELF头位于文件的最开始位置,包含描述整个文件的基本信息。它定义了文件的类型、架构、字节序以及其他关键属性。ELF头由`Elf32_Ehdr`或`Elf64_Ehdr`结构体表示,具体字段包括: - `e_ident`:标识数组,包含魔数(0x7F 'E' 'L' 'F')以及文件类别信息。 - `e_type`:指定文件类型,例如可执行文件(`ET_EXEC`)、目标文件(`ET_REL`)或共享对象(`ET_DYN`)。 - `e_machine`:指定目标架构,如x86(`EM_386`)或x86-64(`EM_X86_64`)。 - `e_version`:指定ELF版本号。 - `e_entry`:程序入口点地址。 - `e_phoff`:程序头表在文件中的偏移量。 - `e_shoff`:节头表在文件中的偏移量。 - `e_flags`:与架构相关的标志位。 - `e_ehsize`:ELF头本身的大小。 - `e_phentsize`:每个程序头表项的大小。 - `e_phnum`:程序头表项的数量。 - `e_shentsize`:每个节头表项的大小。 - `e_shnum`:节头表项的数量。 - `e_shstrndx`:节头字符串表索引。 #### 2. 程序头表(Program Header Table) 程序头表描述了文件的内存布局,主要用于加载器将文件映射到内存中。每个程序头表项由`Elf32_Phdr`或`Elf64_Phdr`结构体表示,包含以下字段: - `p_type`:段的类型,例如加载段(`PT_LOAD`)、动态链接信息段(`PT_DYNAMIC`)等。 - `p_offset`:段在文件中的偏移量。 - `p_vaddr`:段在虚拟内存中的起始地址。 - `p_paddr`:段在物理内存中的起始地址(通常与`p_vaddr`相同)。 - `p_filesz`:段在文件中的大小。 - `p_memsz`:段在内存中的大小。 - `p_flags`:段的访问权限,如读(`PF_R`)、写(`PF_W`)、执行(`PF_X`)。 - `p_align`:段的对齐方式。 #### 3. 节头表(Section Header Table) 节头表描述了文件中各个节(Section)的信息,主要用于链接器操作。每个节头表项由`Elf32_Shdr`或`Elf64_Shdr`结构体表示,包含以下字段: - `sh_name`:节名称的字符串表索引。 - `sh_type`:节的类型,例如代码节(`.text`)、数据节(`.data`)、符号表(`.symtab`)等。 - `sh_flags`:节的属性,如只读(`SHF_ALLOC`)、可执行(`SHF_EXECINSTR`)等。 - `sh_addr`:节在内存中的虚拟地址。 - `sh_offset`:节在文件中的偏移量。 - `sh_size`:节的大小。 - `sh_link`:与其他节的关联信息。 - `sh_info`:附加信息。 - `sh_addralign`:节的对齐方式。 - `sh_entsize`:节中每个条目的大小。 #### 4. 节内容(Section Content) 节内容是ELF文件的核心部分,包含了实际的数据或代码。常见的节包括: - `.text`:存放程序的机器代码。 - `.data`:存放已初始化的全局变量和静态变量。 - `.bss`:存放未初始化的全局变量和静态变量。 - `.rodata`:存放只读数据,如常量字符串。 - `.symtab`:符号表,包含函数和变量的符号信息。 - `.strtab`:字符串表,存储符号表和其他地方使用的字符串。 - `.rela.text`:重定位表,包含对`.text`节的重定位信息。 - `.dynamic`:动态链接信息,用于共享库的加载。 #### 5. 符号表(Symbol Table) 符号表记录了程序中的符号信息,包括函数名、变量名及其对应的地址。符号表分为两种: - `.symtab`:用于链接阶段,包含所有符号信息。 - `.dynsym`:用于动态链接阶段,仅包含对外部符号的引用。 #### 6. 重定位表(Relocation Table) 重定位表用于解决符号引用问题,确保程序能够在不同的内存地址正确运行。常见的重定位表包括: - `.rela.text`:针对代码节的重定位信息。 - `.rela.data`:针对数据节的重定位信息。 #### 7. 动态链接信息(Dynamic Section) 动态链接信息存储在`.dynamic`节中,用于支持动态链接和共享库的加载。它包含一系列键值对,描述了动态链接所需的元信息。 --- ```python # 示例代码:使用Python解析ELF文件的ELF头 import elftools.elf.elffile as elffile def parse_elf_header(file_path): with open(file_path, 'rb') as f: elf = elffile.ELFFile(f) header = elf.header print(f"ELF Class: {header['e_ident']['EI_CLASS']}") print(f"Data Encoding: {header['e_ident']['EI_DATA']}") print(f"Type: {header['e_type']}") print(f"Machine: {header['e_machine']}") print(f"Entry Point: {header['e_entry']}") parse_elf_header("example.elf") ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值