QEMU is a simulator, it's running completely in the user mode. It can provide to simulation mode:
1) Full system emulation mode. In this mode, it can provide a full system, including processors and serials peripherals.
2) User mode simulation. I think it's like a code converter in this mode, as it "can launch Linux processes compiled for one CPU on another CPU", by it's document.
When reading coding, we need to make clear how these happens, how QEMU translate code in an architecture to another, how to simulate processor and peripherals, is that hard to realize?
Also a lists of feature listed by the qemu-tech
.texi, which located in the top level directory of the source code.
From the view point of mine, I think code dynamic translation and self-modifying code are the most intresting feature. Also, the module qemu CPU library is intresting, too.Self-modifying code
: I'm not sure what it's exectely meaning, keeps it here, and it will more easy to understanding when reading the code, which is self-modifying ;D