General Calling conventions specify the low-level details for function calls. They are a part of an ABI. Comparison System V
Continue readingCategory: Debugging & Memory
Example of a found HW issue
Coredump Reasoning It fails to get the value at “0x4(%r8)”, because it’s outside the own memory segments. The value of
Continue readingPLT and GOT for shared libs (ELF)
Introduction With static linking, the position of the code of the static libs are exactly known during compile time. This
Continue readingPrint stack frames (GDB)
Scenario Application code Print frame script Analysis GDB session Frame 0 0x7fffffffe240: 0x0000555555554040 0x0000000300000008 0x7fffffffe250: 0x0000000000000000 0x0000000b00000000 0x7fffffffe260: 0x00007fffffffe280 0x000055555555518e
Continue readingConditional breakpoints (C++)
Showcase Debugging $ g++ -g main.cpp $ gdb a.out (gdb) b main.cpp:5 if i == 5 Breakpoint 1 at 0xa24:
Continue readingFlameGraph (Docker)
Setup Get FlameGraph repo % git clone https://github.com/brendangregg/FlameGraph fg Create Docker image Follow the instructions here: C++ develop container (Docker)
Continue readingPretty printer – Own type
Example code Without pretty printer (gdb) b 29 (gdb) r Breakpoint 1, main () at main.cpp:29 29 return 0; (gdb)
Continue readingStack unwinding
Mechanism 1. Frame pointers … the old default way Frame pointers are enabled by default. Strong optimization (“-O2”, “-O3”) will
Continue readingBasic assembler instructions (x64, A64)
Instructions Purpose x64 (Intel flavor) A64 Copy content (dst = src) MOV RAX, RBX MOV X0, X1 Copy content (dst
Continue readingLayout of std::string (libstdc++)
Source code Analysis $ g++ –version g++ (Ubuntu 13.2.0-4ubuntu3) 13.2.0 $ g++ main.cpp -g $ gdb a.out (gdb) b 7
Continue reading