OneMillionMice commented on Hacking, 2nd Edition by Jon Erickson
This book feels really dense at first, but once you get into the flow it becomes pretty easy to understand. In chapter 1 (Programming), the author will explain a programming concept, show some C code illustrating the concept, then disassemble the code, and then show process in memory with gdb. He repeats that process for several concepts and you can follow along in a VM with a provided .ISO.
The initial explanation of some concepts (like CPU registers) feels incomplete, but as he layers things on he explains more about those concepts. I can see a full picture coming together as the chapter winds on.
I wish I had an explanation of pointers this succinct when I was in school.