aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/glibc.md
blob: 2b2ab341b541a9167877a6f7014651ce14b04959 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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