qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] the way i read the registers may wrong


From: Peter Cheung
Subject: [Qemu-devel] the way i read the registers may wrong
Date: Mon, 23 Sep 2013 00:13:30 +0800

Hi all
   I am using the following code to read registers, i can read the value of EIP, but when i dump the value pointed by EIP, all are zero, byte code should not be zero, so i think my code is wrong. Please point me out thanks?

static void gkd_read_registers(CPUState *cpu, char *buffer) {

printf("gkd_read_registers()\n");

CPUArchState *env = cpu->env_ptr;

sprintf(buffer,

"cs=%x,eip=%x,ds=%x,es=%x,fs=%x,gs=%x,ss=%x,eflags=%x,eax=%x,ebx=%x,ecx=%x,edx=%x,esi=%x,edi=%x,ebp=%x,esp=%x,cr0=%x,cr2=%x,cr3=%x,cr4=%x",

env->segs[R_CS].base, env->eip, env->segs[R_DS].base, env->segs[R_ES].base,

env->segs[R_FS].base, env->segs[R_GS].base, env->segs[R_SS].base,

env->eflags, env->regs[R_EAX], env->regs[R_EBX],

env->regs[R_ECX], env->regs[R_EDX], env->regs[R_ESI],

env->regs[R_EDI], env->regs[R_EBP], env->regs[R_ESP], env->cr[0],

env->cr[2], env->cr[3], env->cr[4]);

sprintf(buffer + strlen(buffer),

",dr0=%x,dr1=%x,dr2=%x,dr3=%x,dr6=%x,dr7=%x", env->dr[0],

env->dr[1], env->dr[2], env->dr[3], env->dr[6], env->dr[7]);


sprintf(buffer + strlen(buffer), ",gdtr=%x,gdtr_limit=%x", env->gdt.base,

env->gdt.limit);

sprintf(buffer + strlen(buffer), ",ldtr=%x,ldtr_limit=%x", env->ldt.base,

env->ldt.limit);

sprintf(buffer + strlen(buffer), ",idtr=%x,idtr_limit=%x", env->idt.base,

env->idt.limit);

sprintf(buffer + strlen(buffer), ",tr=%x", env->tr);

}


Thanks
from Peter

reply via email to

[Prev in Thread] Current Thread [Next in Thread]