Over the past semester, I became a better C programmer, improved my assembly, and learned how to be a software reverse engineer! In my previous semester’s reflection, I was introduced to the basics of assembly and operating systems. This semester I built upon those foundational skills by creating programs that looked directly at the operating system, including my version of word count, a memory scanner program, and an ELF file reader program. By coding these projects I was able to improve my C programming and have hands-on experience with the important mechanisms within the operating systems. The other half of the class included the software reverse engineering where I used my knowledge of assembly, Ghidra, and GDB. I have used these tools in the past however this class gave me crackmes to practice on. Some crackmes were easy to follow using Ghidra and looking at the C program window, other programs I used GDB to change values within registers or the stack in order jump to the right places in the code. I have learned a lot about segfaulting in this class, the programs that I created in this class and the crackmes had me look at and modify usable addresses. These crackme solutions were like needles in a haystack, jump to the wrong address in code and instantly segfault and restart the GDB process.