コード例 #1
0
ファイル: dbg_hard_stp.c プロジェクト: clflush/ramooflax
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;
}
コード例 #2
0
ファイル: dbg_hard_brk.c プロジェクト: puzirev/ramooflax
int dbg_hard_brk_event(ctrl_evt_hdl_t *hdlr)
{
   uint8_t n;

   if(!dbg_hard_brk_enabled())
      return VM_IGNORE;

   debug(DBG_HARD_BRK, "hard brk event\n");

   for(n=0 ; n<DBG_HARD_BRK_NR ; n++)
      if(__hbrk_raised(n) && __hbrk_enabled(n))
      {
         dbg_evt_t *evt = &info->vmm.ctrl.dbg.evt;

         evt->type = __hbrk_get_type(n);
         evt->hard = n;
         evt->addr = get_dr(n);
         *hdlr     = dbg_hard_brk_get_hdlr(n);

         dbg_hard_set_dr6_dirty(1);
         debug(DBG_HARD_BRK, "prepared hard brk ctrl event for 0x%X\n", evt->addr);
         return VM_DONE;
      }

   return VM_IGNORE;
}
コード例 #3
0
ファイル: dbg_hard_stp.c プロジェクト: my33love/ramooflax
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;
}
コード例 #4
0
ファイル: dbg_hard.c プロジェクト: Debug-Orz/ramooflax
static void dbg_hard_release_dr()
{
   debug(DBG_HARD_BRK, "hard release dr\n");

   /* XXX: release DBG_CTL_MSR */

   /* XXX: vmm area check ? */
   set_dr0(info->vm.dr_shadow[0].raw);
   set_dr1(info->vm.dr_shadow[1].raw);
   set_dr2(info->vm.dr_shadow[2].raw);
   set_dr3(info->vm.dr_shadow[3].raw);

   __dr6.low = info->vm.dr_shadow[4].low;
   __dr7.low = info->vm.dr_shadow[5].low;

   dbg_hard_set_dr6_dirty(0);

   __post_access(__dr6);
   __post_access(__dr7);
   __allow_dr_access();
}