Thank you for your insightful guidance in our previous discussion. Over the past few weeks, I have been studying the source code of S2E and SymDrive to better understand their symbolic execution workflows for hardware driver testing. I would greatly appreciate your expertise on the following questions:
1. I’ve noticed that the implementation of the current SymbolicHardware plugin has changed significantly compared to the older version of S2E. I dont know if I was right for the following statements:
In S2E-old, SymbolicHardware is deeply coupled with QEMU, it seems register a fake device in QEMU.
In S2E 2.0, SymbolicHardware uses SpecialFunctionHandler to hook the call to
tcg_llvm_trace_port_access and
tcg_llvm_trace_mmio_access , then symbolize the value.
You said "
S2E is now decoupled from QEMU and that requires extra communication". SymDrive is mainly based on SymbolicHardware plugin,
does it mean that I can still use a coupled way(like adding old code to QEMU) to implement it (just for my own study purpose)?2.You said “
S2E 2.0 does not support symbolic PCI devices”.
In my understanding, running a driver needs some inputs from hardware device(by PIO/MMIO/DMA), which have been symbolized and provided in SymbolicHardwar plugin.Is it special for PCIe devices and other devices on different buses?3.
What factors currently limit the scope of hardware drivers that S2E can test?
Your insights would be invaluable to my research.Thank you for your time.
Rinlang