On Monday we talked about basic buffer overflows and how they can be used to overwrite return addresses and hijack execution. However, this technique relied on us already having a function in the binary that would do exactly what we wanted it to do. Today, we'll be exploring shellcoding, and how we can inject OUR OWN code into a program.