Computer programs usually allocate certain amount of space to store data during
execution. This space is known as buffer. A buffer overflow occurs when the amount of
data is larger than the allocated buffer. When that happened, the data will overwrite
memory area that followed the buffer. There is no telling what is after the buffer;
however what we hope to overwrite is memory area which will alter the execution flow
of the program. The goal is to direct the execution flow to our code, thus allow us to
execute anything in the victim PC.