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);
}
Thanksfrom Peter