1. A method for analyzing a computer program running on a first virtual machine, the method comprising: running the computer program on the first virtual machine and recording a log comprising non-deterministic events in the instruction stream of the first virtual machine during the running of the computer program, the log further comprising read data that is output during the running of the computer program from a first emulated device of the first virtual machine to a first virtual processor of the first virtual machine, the read data corresponding to read requests from the first virtual processor to the first emulated device; initiating a replay platform having a second virtual processor; accessing the log comprising non-deterministic events in the instruction stream of the first virtual machine and the read data corresponding to read requests from the first virtual processor of the first virtual machine to the first emulated device of the first virtual machine; replaying the instruction stream of the first virtual machine on the replay platform using the log, and providing the read data to the second virtual processor of the replay platform during the replaying of the instruction stream of the first virtual machine; and executing program analysis code on the replay platform during the replay.