Reverse Engineering for Beginners

Here are some of my notes in English for beginners about reverse engineering who would like to learn to understand x86 (which accounts for almost all executable software in the world) and ARM code created by C/C++ compilers.

Why one should learn assembly language these days? Unless you are OS developer, you probably don’t need to write in assembly: modern compilers perform optimizations much better than humans do. Also, modern CPUs are very complex devices and assembly knowledge would not help you understand its internals. That said, there are at least two areas where a good understanding of assembly may help: first, security/malware research. Second, gaining a better understanding of your compiled code while debugging.

Therefore, this book is intended for those who want to understand assembly language rather than to write in it, which is why there are many examples of compiler output.