int dbg_hard_stp_event() { offset_t addr; int mode; dbg_evt_t *evt; if(!dbg_hard_stp_enabled()) return CTRL_EVT_IGNORE; debug(DBG_HARD_STP, "sstep event\n"); if(dbg_soft_resuming()) dbg_soft_resume_post(&__hstp_ctx.cr3); dbg_hard_set_dr6_dirty(1); dbg_hard_stp_disable(); if(dbg_hard_stp_requestor() == DBG_REQ_VMM) { debug(DBG_HARD_STP, "internal sstep event\n"); return CTRL_EVT_INTERN; } vm_get_code_addr(&addr, 0, &mode); evt = &info->vmm.ctrl.dbg.evt; evt->type = DBG_EVT_TYPE_HARD_SSTEP; evt->addr = addr; debug(DBG_HARD_STP, "prepared sstep ctrl event for 0x%X\n", evt->addr); return CTRL_EVT_DONE; }
int dbg_hard_stp_event() { offset_t addr; int mode; dbg_evt_t *evt; if(!dbg_hard_stp_enabled()) return VM_IGNORE; debug(DBG_HARD_STP, "sstep event [req %s]\n" ,dbg_hard_stp_requestor()?"vmm":"usr"); if(dbg_soft_resuming()) dbg_soft_resume_post(); dbg_hard_stp_disable(); if(dbg_hard_stp_requestor() == DBG_REQ_VMM) { dbg_hard_dr6_clean(); return VM_INTERN; } dbg_hard_set_dr6_dirty(1); vm_get_code_addr(&addr, 0, &mode); evt = &info->vmm.ctrl.dbg.evt; evt->type = DBG_EVT_TYPE_HARD_SSTEP; evt->addr = addr; debug(DBG_HARD_STP, "prepared sstep ctrl event for 0x%X\n", evt->addr); return VM_DONE; }