static int r_debug_native_step (RDebug *dbg) { #if __WINDOWS__ && !__CYGWIN__ /* set TRAP flag */ CONTEXT regs __attribute__ ((aligned (16))); r_debug_native_reg_read (dbg, R_REG_TYPE_GPR, (ut8 *)®s, sizeof (regs)); regs.EFlags |= 0x100; r_debug_native_reg_write (dbg, R_REG_TYPE_GPR, (ut8 *)®s, sizeof (regs)); r_debug_native_continue (dbg, dbg->pid, dbg->tid, dbg->reason.signum); r_debug_handle_signals (dbg); return true; #elif __APPLE__ return xnu_step (dbg); #elif __BSD__ int ret = ptrace (PT_STEP, dbg->pid, (caddr_t)1, 0); if (ret != 0) { perror ("native-singlestep"); return false; } return true; #elif __CYGWIN__ #warning "r_debug_native_step not supported on this platform" return false; #else // linux return linux_step (dbg); #endif }
static int windows_step (RDebug *dbg) { /* set TRAP flag */ CONTEXT regs __attribute__ ((aligned (16))); r_debug_native_reg_read (dbg, R_REG_TYPE_GPR, (ut8 *)®s, sizeof (regs)); regs.EFlags |= 0x100; r_debug_native_reg_write (dbg, R_REG_TYPE_GPR, (ut8 *)®s, sizeof (regs)); r_debug_native_continue (dbg, dbg->pid, dbg->tid, dbg->reason.signum); r_debug_handle_signals (dbg); return true; }