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                                          

Reply via email to