Worth Reading: Bypassing Windows' Address Space Layout Randomisation
Modern operating systems randomise all memory addresses (Address Space Layout Randomisation). Libraries loaded into memory, for example, are loaded into memory with random offsets. The result is that simply discovering a buffer overflow in a browser and so gaining control over the instruction pointer is not sufficient to allow attackers to execute their own code. Exploit writers are faced with the problem of where to jump to.