Debugging Guest Code

It is possible to attach GDB to any running instance of S2E. S2E relies on the QEMU GDB interface, which can be enabled with the -s command line option. This option creates a socket on port number 1234.

./i386-s2e-softmmu/qemu  -s2e-config-file config.lua -s

Once the guest is launched and the program is running, attach GDB to it.

gdb /path/to/my/prog
target remote localhost:1234
# Use gdb as usual (set breakpoints, source directories, single-step, etc.).

Remarks

  • GDB can only manipulate the current path. Use the DFS search strategy to have a coherent debugging experience.

  • GDB cannot inspect symbolic variables. If you attempt to display a symbolic variable, S2E will concretize it.

  • You can also debug kernel-mode code.

Useful tips

  • At any point, if you feel that symbolic execution got stuck, attach GDB to the running S2E instance to check what code is being executed.