Since VS2008(Is it right?), MSVC linker option has a Base Address Randomization.
What the main purpose of this feature?
What I only glad to is, I don't need to rebase my Dlls manually anymore.
Is that all? Was it their purpose?
Is there any other benefit else.
I believe you'll find that the idea is to change the entry points making it harder to exploit them - ie now an attacker not only needs to be able get executable code into memory but also work out which addresses it should be pointing at.
See here for more information