Jump to content

DBG_C_RangeStep

From EDM2
Revision as of 23:34, 4 March 2020 by Martini (talk | contribs) (Created page with "Debug Command 26 - Range Step Command ;Parameters *Pid= Process ID of debuggee *Tid= Thread ID of thread to range-step *Cmd= DBG_C_RangeStep *Value= Linear address denot...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Debug Command 26 - Range Step Command

Parameters
  • Pid= Process ID of debuggee
  • Tid= Thread ID of thread to range-step
  • Cmd= DBG_C_RangeStep
  • Value= Linear address denoting start of range (exclusive)
  • Addr= Linear address denoting end of range (exclusive)
Returns

The RangeStep notification is usually returned, but any Debug notification may be returned. See DosDebug Notifications for more information.

This command allows a debugger to specify a range of addresses (bounded by the linear addresses in the Value and Addr fields) through which a debuggee thread should single-step until one of the following conditions occurs:

  • The debuggee thread's linear EIP (instruction pointer) is outside the range.
  • The linear EIPs of consecutive debuggee threads are the same.
  • Some other notification occurs.

When the DBG_C_RangeStep command returns, the register set is automatically updated to reflect the thread that detected the event.

Callgates that result in a privilege level transition to ring 0 will appear to range-step as a single instruction, with the range-step continuing after the function completes. This hides ring 0 execution from debuggers.

Attempting to range-step a thread that is frozen results in an error.

Restrictions

To accomplish callgate single-stepping, the single-step must be simulated because the flags (specifically, the TF bit) are not stored in the ring 0 callgate stack frame. Because of this, a range-step that results in leaving a ring 0 callgate will sometimes not execute any user-space code. The following range-step should function normally.

Range-stepping some REP instructions may not work correctly due to errors in the 80386 processor.