diff --git a/libafl_extras/syx-snapshot/device-save.c b/libafl_extras/syx-snapshot/device-save.c index 10b81071b5..1ef0200cd9 100644 --- a/libafl_extras/syx-snapshot/device-save.c +++ b/libafl_extras/syx-snapshot/device-save.c @@ -78,8 +78,6 @@ device_save_state_t* device_save_kind(device_snapshot_kind_t kind, char** names) } } - printf("\n"); - qemu_put_byte(f, QEMU_VM_EOF); qemu_fclose(f); @@ -108,3 +106,29 @@ void device_restore_all(device_save_state_t* dss) { void device_free_all(device_save_state_t* dss) { g_free(dss->save_buffer); } + +char** device_list_all(void) { + SaveStateEntry *se; + + size_t size = 1; + QTAILQ_FOREACH(se, &savevm_state.handlers, entry) { + size++; + } + + char** list = malloc(size * sizeof(char*)); + size_t i = 0; + QTAILQ_FOREACH(se, &savevm_state.handlers, entry) { + if (se->is_ram) { + continue; + } + if (!strcmp(se->idstr, "globalstate")) { + continue; + } + + list[i] = se->idstr; + i++; + } + list[i] = NULL; + + return list; +} diff --git a/libafl_extras/syx-snapshot/device-save.h b/libafl_extras/syx-snapshot/device-save.h index 684c342630..c419666529 100644 --- a/libafl_extras/syx-snapshot/device-save.h +++ b/libafl_extras/syx-snapshot/device-save.h @@ -19,5 +19,8 @@ typedef enum device_snapshot_kind_e { device_save_state_t* device_save_all(void); device_save_state_t* device_save_kind(device_snapshot_kind_t kind, char** names); + void device_restore_all(device_save_state_t* device_save_state); void device_free_all(device_save_state_t* dss); + +char** device_list_all(void);