How to read backtrace /memory dump from a GCC fortify crash?

477 Views Asked by At

I have an exe crashing from a fortify fail, I get the following backtrace/mamory dump. How can I use it? (GCC, Redhat Linux)

2*** buffer overflow detected ***: /apps/suns/runtime/bin/mardb82 terminated
======= Backtrace: =========
/lib64/libc.so.6(__fortify_fail+0x37)[0x7faa7a1967a7]
/lib64/libc.so.6(+0x116922)[0x7faa7a194922]
/lib64/libc.so.6(+0x1158eb)[0x7faa7a1938eb]
/apps/suns/runtime/bin/mardb82[0x40853b]
/apps/suns/runtime/bin/mardb82[0x409fbc]
/apps/suns/runtime/bin/mardb82[0x40a7f0]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7faa7a0a0555]
/apps/suns/runtime/bin/mardb82[0x401d79]
======= Memory map: ========
00400000-00423000 r-xp 00000000 fd:00 101870038                          /apps/suns/runtime/bin/mardb82
00622000-00623000 r--p 00022000 fd:00 101870038                          /apps/suns/runtime/bin/mardb82
00623000-0062d000 rw-p 00023000 fd:00 101870038                          /apps/suns/runtime/bin/mardb82
0062d000-006f6000 rw-p 00000
1

There are 1 best solutions below

6
KamilCuk On

Backtrace represents a stack trace.

Backtrace is generally generated by backtrace_symbols() from glibc https://github.com/lattera/glibc/blob/master/debug/backtracesyms.c .

/lib64/libc.so.6(+0x116922)[0x7faa7a194922]

The current frame points into /lib64/libc.so.6 file to byte 0x116922 in that file. That byte is loaded at address 0x7faa7a194922 inside running program address space.

/lib64/libc.so.6(__fortify_fail+0x37)[0x7faa7a1967a7]

Same as above, but the offset if given relative to a function __fortify_fail defined in the file.

/memory dump

The format of memory dump is explained in man 5 proc under /proc/[pid]/maps entry.

WHy don't I haver that here?

Because debugging symbols are missing from the ELF files.