An introduction to software reverse engineering tools and methodologies. Fundamental topics will be introduced: compilers, linkers, loaders, assembly language, as well as static and dynamic analysis tools. We will motivate some reasons for software reverse engineering and examine the background material necessary for an understanding of the subject. This will include computer architecture and low-level systems programming, as well as an introduction to x86_64 assembly language. We will apply this newly acquired knowledge while learning about static and dynamic analysis tools used by practitioners of software reverse engineering.