I want to present a way of understanding your CPU, x86 assembly, and the artistry of exploiting binaries.
I want to teach this to people new to the field. So I'd like to introduce the idea that your CPU is a wizard. A wizard that reads out loud books. Choose your own adventure books. The wizard never reads them in linear order, but jumps around. In order to assist in telling this story the wizard uses a piece of paper, called the stack, to keep notes about your choices.
There are a ton of terms you need to learn and little behaviors to understand. This story seeks to explain those terms and tendencies in a way that helps you just get it. Because once you just get it, the field is actually, sometimes, straight forward.
Each book that gets read is a computer program, and when the wizard reads, his words have the power to change reality.
If we're clever we can even trick the wizard into saying spells for us... but that's for later. First let's just pay attention to a normal CPU execution of a program.
What follows is a video explaining the connection between an example book and a real C program:
Understanding how your CPU actually does stuff is hard. So I present to you the first book in the wizard's library: