int put_register_as_bytes (regnames_t which, char *value) { memcpy((char *)&_registers[hal_gdb_register_offsets[which]], value, REGSIZE(which)); return(1); }
// Alter the contents of saved register WHICH to contain VALUE. This // is only used for registers larger than sizeof(target_register_t). // Return non-zero if it is a valid register. int put_register_as_bytes (regnames_t which, char *value) { int offset = reg_offset(which); memcpy ((char *)_registers + offset, value, REGSIZE(which)); return 1; }
// Store VALUE in the register corresponding to WHICH in the exception // context. void put_register (regnames_t which, target_register_t value) { int offset = reg_offset(which); if (REGSIZE(which) > sizeof(target_register_t)) return; _registers[offset/sizeof(target_register_t)] = value; }
// Return the currently-saved value corresponding to register REG of // the exception context. target_register_t get_register (regnames_t reg) { target_register_t val; int offset = reg_offset(reg); if (REGSIZE(reg) > sizeof(target_register_t)) return -1; val = _registers[offset/sizeof(target_register_t)]; return val; }
U_32 edi; uint16 ds; uint16 es; uint16 fs; uint16 gs; uint16 ss; uint16 cs; U_32 eip; U_32 eflags; }; #define REGSIZE(_field_) ((jint)sizeof(((NcaiRegisters*)0)->_field_)) #define REGOFF(_field_) ((POINTER_SIZE_INT)&(((NcaiRegisters*)0)->_field_)) NcaiRegisterTableItem g_ncai_reg_table[] = { {"eax", REGSIZE(eax), REGOFF(eax) }, {"ebx", REGSIZE(ebx), REGOFF(ebx) }, {"ecx", REGSIZE(ecx), REGOFF(ecx) }, {"edx", REGSIZE(edx), REGOFF(edx) }, {"esp", REGSIZE(esp), REGOFF(esp) }, {"ebp", REGSIZE(ebp), REGOFF(ebp) }, {"esi", REGSIZE(esi), REGOFF(esi) }, {"edi", REGSIZE(edi), REGOFF(edi) }, {"ds", REGSIZE(ds), REGOFF(ds) }, {"es", REGSIZE(es), REGOFF(es) }, {"fs", REGSIZE(fs), REGOFF(fs) }, {"gs", REGSIZE(gs), REGOFF(gs) }, {"ss", REGSIZE(ss), REGOFF(ss) }, {"cs", REGSIZE(cs), REGOFF(cs) }, {"eip", REGSIZE(eip), REGOFF(eip) }, {"eflags", REGSIZE(eflags),REGOFF(eflags)},