How does DieHard differ from Vistas, OpenBSDs, and Linuxs “address space randomization”?
Address space randomization places large chunks of memory (obtained via mmap / VirtualAlloc) at different places in memory, but leaves unchanged the relative position of heap objects. Linux adds some checks for particular memory management errors (and then aborts the program). Long technical answer: OpenBSD (a variant of PHKmalloc) does some of what DieHard’s allocator does, but DieHard does much more. On the security side, DieHard adds much more “entropy”; on the reliability side, it mathematically reduces the risk that a programmer bug will have any impact on program execution. OpenBSD randomly locates pages of memory and allocates small objects from these pages. It improves security by avoiding the effect of certain errors. Like DieHard, it is resilient to double and invalid frees. It places guard pages around large chunks and frees such large chunks back to the OS (causing later references through dangling pointers to fail unless the chunk is reused). It attempts to block some buff