memsave monitor command
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2288 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
2ee4aed86f
commit
b371dc594b
32
monitor.c
32
monitor.c
@ -642,6 +642,36 @@ static void do_print(int count, int format, int size, unsigned int valh, unsigne
|
|||||||
term_printf("\n");
|
term_printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void do_memory_save(unsigned int valh, unsigned int vall,
|
||||||
|
uint32_t size, const char *filename)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
target_long addr = GET_TLONG(valh, vall);
|
||||||
|
uint32_t l;
|
||||||
|
CPUState *env;
|
||||||
|
uint8_t buf[1024];
|
||||||
|
|
||||||
|
env = mon_get_cpu();
|
||||||
|
if (!env)
|
||||||
|
return;
|
||||||
|
|
||||||
|
f = fopen(filename, "wb");
|
||||||
|
if (!f) {
|
||||||
|
term_printf("could not open '%s'\n", filename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (size != 0) {
|
||||||
|
l = sizeof(buf);
|
||||||
|
if (l > size)
|
||||||
|
l = size;
|
||||||
|
cpu_memory_rw_debug(env, addr, buf, l, 0);
|
||||||
|
fwrite(buf, 1, l, f);
|
||||||
|
addr += l;
|
||||||
|
size -= l;
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
static void do_sum(uint32_t start, uint32_t size)
|
static void do_sum(uint32_t start, uint32_t size)
|
||||||
{
|
{
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
@ -1218,6 +1248,8 @@ static term_cmd_t term_cmds[] = {
|
|||||||
#endif
|
#endif
|
||||||
{ "stopcapture", "i", do_stop_capture,
|
{ "stopcapture", "i", do_stop_capture,
|
||||||
"capture index", "stop capture" },
|
"capture index", "stop capture" },
|
||||||
|
{ "memsave", "lis", do_memory_save,
|
||||||
|
"addr size file", "save to disk virtual memory dump starting at 'addr' of size 'size'", },
|
||||||
{ NULL, NULL, },
|
{ NULL, NULL, },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user