As a regular CTF competitor for over 4 years now, I cannot emphasize the value in simply playing CTFs if you really want to learn this stuff. So many people seem to think there's a secret manual laying around that teaches you all that is involved in going from a compiled binary to a shell. The referenced book should be used as a resource for when you come across a new topic and need some help. If you want to get started here are some useful links.
http://smashthestack.org/
https://ctftime.org/
http://overthewire.org/wargames/
http://repo.shell-storm.org/CTF/
https://github.com/ctfs/write-ups