Microprocessors
This course delved into computer architecture. We learned the basic building blocks of a computer as well as how computer hardware works together with software. Topics included Boolean logic and logic gates, components of a microprocessor, memory and caching, instruction set architecture, and assembly language. Labs were performed on a Unix shell.
Projects
-
Bomb Defusing
In this lab "binary bombs" are planted throughout programs that require the correct password to deactivate correctly. In order to find the correct password we had to delve into the assembly code for each phase and discover what password the program was looking for.
Report -
Writing ARM Assembly
Working from the other end, this lab required us to translate simple C functions into assembly instructions. This required us to understand the use and purpose of the different registers and different instructions. Throughout this lab our code must observe "stack discipline."
Report
Code -
Sabotaging the Stack
A lab that turns the focus to hacking programs, the purpose of this lab was to the understand buffer overfows and how to use them to take control of a program. To demonstrate this we used buffer overflows to call functions that were never previously called, to bypass parts of code and manipulate a password check, and to access a shell.
Report -
Cache Performance
To understand memory and caches this lab took a look at the effects of caches on memory intensive code. Specifically, the code we used was single matrix multiplication and block matrix multiplication. We used the cachegrind tool to examine the effects of using different matrix multiplication algorithms on cache performance.
Report