I wrote a little LD_PRELOAD library that makes it easy to inspect and interact with a running program's glibc heap.<p>It's fun to pause processes, free a bunch of their allocations, then resume them. Most of the time, the processes continue as though nothing happened, but sometimes they do interesting things :)
Would be nice to mention how to determine those *_OFFSET constants. For reference, on my linux mint (glibc 2.39) system this gives them:<p><pre><code> gdb /lib/x86_64-linux-gnu/libc.so.6 -ex 'p &main_arena' -ex 'p malloc'
</code></pre>
Also, can attach to an existing process via:<p><pre><code> sudo gdb -p <PID_OF_PROCESS> -ex 'call (void*) dlopen("/path/to/libheap_explorer.so", 2)' -ex 'p explore_heap()'</code></pre>
If you are using a Mac, heapster is a different but also interesting tool for learning about what goes on inside the heap<p><a href="https://blackwinghq.com/blog/posts/playing-with-libmalloc/" rel="nofollow">https://blackwinghq.com/blog/posts/playing-with-libmalloc/</a>