aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/development/glibc.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/development/glibc.md')
-rw-r--r--src/development/glibc.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/development/glibc.md b/src/development/glibc.md
new file mode 100644
index 0000000..2b2ab34
--- /dev/null
+++ b/src/development/glibc.md
@@ -0,0 +1,47 @@
+# glibc
+
+## malloc tracer [`mtrace(3)`][mtrace]
+Trace memory allocation and de-allocation to detect memory leaks.
+Need to call `mtrace(3)` to install the tracing hooks.
+
+If we can't modify the binary to call `mtrace` we can create a small shared
+library and pre-load it.
+```c
+// libmtrace.c
+#include <mcheck.h>
+__attribute__((constructor)) static void init_mtrace() { mtrace(); }
+```
+
+Compile as:
+```bash
+gcc -shared -fPIC -o libmtrace.so libmtrace.c
+```
+
+To generate the trace file run:
+```bash
+export MALLOC_TRACE=<file>
+LD_PRELOAD=./libmtrace.so <binary>
+```
+**Note**: If `MALLOC_TRACE` is not set `mtrace` won't install tracing hooks.
+
+To get the results of the trace file:
+```bash
+mtrace <binary> $MALLOC_TRACE
+```
+
+## malloc check [`mallopt(3)`][mallopt]
+Configure action when glibc detects memory error.
+
+```bash
+export MALLOC_CHECK_=<N>
+```
+
+Useful values:
+```markdown
+1 print detailed error & continue
+3 print detailed error + stack trace + memory mappings & abort
+7 print simple error message + stack trace + memory mappings & abort
+```
+
+[mtrace]: http://man7.org/linux/man-pages/man3/mtrace.3.html
+[mallopt]: http://man7.org/linux/man-pages/man3/mallopt.3.html