Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Core-dump file format

Tags:

linux

kernel

gdb

I have written a custom core-dump handling application for a project. I have changed '/proc/sys/kernel/core_pattern' to call my dump-handler and its invoked successfully.

Now the issue is saving the core-dump into a file that can be recognized by gdb. Currently my dump-handler read the dump from STDIN and save it into a file 'core.dump'. When I try to load this core dump into gdb it gives me error:

(gdb) ... is not a core dump: File format not recognized

When I run 'file' command on a standard core dump it give me following:

core: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from './dump_gen'

And for custom generated dump, 'file' gives following:

core.dump: data

Please can anyone help me how to write core-dump correctly so it can be used in gdb.

PS: I don't want to use standard core dump file.

like image 507
AvadhP Avatar asked Jul 06 '11 19:07

AvadhP


People also ask

What is in a core dump file?

A core dump is a file that gets automatically generated by the Linux kernel after a program crashes. This file contains the memory, register values, and the call stack of an application at the point of crashing.

What is the core dump file name?

Summary. On Linux operating systems, core files are, by default, named "core" and are located in the working directory of the application which faulted. In the case of TM1, this is usually the tm1/bin64 directory.

Where is the core dump file?

By default, all core dumps are stored in /var/lib/systemd/coredump (due to Storage=external ) and they are compressed with zstd (due to Compress=yes ). Additionally, various size limits for the storage can be configured. Note: The default value for kernel.

How do I open a core dump file?

Use one of the options: Select Run | Open Core Dump from the main menu or call this action from Help | Find Action ( Ctrl+Shift+A ). If there are no Core Dump Debug configurations in the project, the Open Core Dump dialog will be shown right away. Otherwise, select New Core Dump from the popup menu.


2 Answers

I think you somehow don't write all the data to the core file.

Create a simple script, make it executable and set the core pattern to the script.

#!/bin/sh
cat > /tmp/core.$$

Now generate a core file (for example run sleep 1243 and press ctrl+\) and it should work.

I just tested it myself on my system and it works without a problem.

like image 58
Ulrich Dangel Avatar answered Sep 28 '22 02:09

Ulrich Dangel


The first thing to check that comes to mind is the Elf header flag that indicates what kind of file it is. It has four values - shared object, unlinked object, executable and core dump. That's most likely what's causing gdb errors.

Also, try examining it with objdump - it can pull apart the entire ELF file for analysis what part of it is apparently not good.

You can find the ELF spec at https://refspecs.linuxbase.org/elf/elf.pdf

like image 30
dascandy Avatar answered Sep 28 '22 00:09

dascandy