About This Course
This course explores the fascinating world of emulation, guiding learners from the fundamentals of CPU architecture to the inner workings of QEMU and advanced instrumentation techniques. It provides a hands-on journey through the layers of abstraction that make software capable of imitating hardware—showing how emulation powers development, debugging, and security research.
Learners will progressively build their own 8-bit CPU emulator in Python (SimpleProc-8), implement registers, memory, and instruction decoding, and extend the system with interrupts, MMIO, and UART I/O. The course culminates in an exploration of QEMU internals, where participants will analyze translation blocks, experiment with Just-In-Time (JIT) compilation, and add custom instrumentation helpers to collect runtime telemetry.
Through a combination of interactive labs, lectures, and browser-based exercises, students will bridge the gap between theory and practice. Each module builds directly on the previous one, leading up to a final project that demonstrates a working, instrumented emulator.
By the end of this course, you will not only understand how emulators function—you will be able to design, modify, and analyze them to support research, debugging, or vulnerability discovery.