Heap Exploitation Part 1: Understanding the Glibc Heap Implementation