windows-nt/Source/XPSP1/NT/base/ntos/rtl/amd64/debugstb.asm

252 lines
5.9 KiB
NASM
Raw Normal View History

2020-09-26 03:20:57 -05:00
title "Debug Support Functions"
;++
;
; Copyright (c) 2000 Microsoft Corporation
;
; Module Name:
;
; debugstb.asm
;
; Abstract:
;
; This module implements functions to support debugging NT.
;
; Author:
;
; David N. Cutler (davec) 26-Jun-2000
;
; Environment:
;
; Any mode.
;
;--
include ksamd64.inc
subttl "Break Point"
;++
;
; VOID
; DbgBreakPoint (
; VOID
; )
;
; Routine Description:
;
; This function executes a breakpoint instruction. Useful for entering
; the debugger under program control. This breakpoint will always go to
; the kernel debugger if one is installed, otherwise it will go to the
; debug subsystem.
;
; Arguments:
;
; None.
;
; Return Value:
;
; None.
;
;--
LEAF_ENTRY DbgBreakPoint, _TEXT$00
int 3 ; break into debugger
ret ; return
LEAF_END DbgBreakPoint, _TEXT$00
subttl "User Break Point"
;++
;
; VOID
; DbgUserBreakPoint()
;
; Routine Description:
;
; This function executes a breakpoint instruction. Useful for entering
; the debug subsystem under program control. The kernel debugger will
; ignore this breakpoint since it will not find the instruction address
; its breakpoint table.
;
; Arguments:
;
; None.
;
; Return Value:
;
; None.
;
;--
LEAF_ENTRY DbgUserBreakPoint, _TEXT$00
int 3 ; break into debugger
ret ; return
LEAF_END DbgUserBreakPoint, _TEXT$00
subttl "Break Point With Status"
;++
;
; VOID
; DbgBreakPointWithStatus(
; IN ULONG Status
; )
;
; Routine Description:
;
; This function executes a breakpoint instruction. Useful for entering
; the debugger under program control. This breakpoint will always go to
; the kernel debugger if one is installed, otherwise it will go to the
; debug subsystem. This function is identical to DbgBreakPoint, except
; that it takes an argument which the debugger can see.
;
; Note: The debugger checks the address of the breakpoint instruction
; against the address RtlpBreakWithStatusInstruction. If it matches,
; we have a breakpoint with status. A breakpoint is normally issued
; with the break_debug_stop macro which generates two instructions.
; We can't use the macro here because of the "label on the breakpoint"
; requirement.
;
; Arguments:
;
; Status (ecx) - Supplies the break point status code.
;
; Return Value:
;
; None.
;
;--
altentry RtlpBreakWithStatusInstruction
LEAF_ENTRY DbgBreakPointWithStatus, _TEXT$00
ALTERNATE_ENTRY RtlpBreakWithStatusInstruction
int 3 ; break into debugger
ret ; return
LEAF_END DbgBreakPointWithStatus, _TEXT$00
subttl "Debug Print"
;++
;
; NTSTATUS
; DebugPrint(
; IN PSTRING Output,
; IN ULONG ComponentId,
; IN ULONG Level
; )
;
; Routine Description:
;
; This function executes a debug print breakpoint.
;
; Arguments:
;
; Output (rcx) - Supplies a pointer to the output string descriptor.
;
; ComponentId (edx) - Supplies the Id of the calling component.
;
; Level (r8d) - Supplies the output importance level.
;
; Return Value:
;
; STATUS_SUCCESS is returned if the debug print was completed successfully.
;
; STATUS_BREAKPOINT is returned if user typed a Control-C during print.
;
; STATUS_DEVICE_NOT_CONNECTED is returned if kernel debugger not present.
;
;--
LEAF_ENTRY DebugPrint, _TEXT$00
mov r9d, r8d ; set importance level
mov r8d, edx ; set component id
mov dx, StrLength[rcx] ; set length of output string
mov rcx, StrBuffer[rcx] ; set address of output string
mov eax, BREAKPOINT_PRINT ; set debug service type
int 2dh ; call debug service
int 3 ; required - do not remove
ret ; return
LEAF_END DebugPrint, _TEXT$00
subttl "Debug Prompt"
;++
;
; ULONG
; DebugPrompt(
; IN PSTRING Output,
; IN PSTRING Input
; )
;
; Routine Description:
;
; This function executes a debug prompt breakpoint.
;
; Arguments:
;
; Output (rcx) - Supplies a pointer to the output string descriptor.
;
; Input (rdx) - Supplies a pointer to the input string descriptor.
;
; Return Value:
;
; The length of the input string is returned as the function value.
;
;--
LEAF_ENTRY DebugPrompt, _TEXT$00
mov r9w, StrMaximumLength[rdx] ; set maximum length of input string
mov r8, StrBuffer[rdx] ; set address of input string
mov dx, StrLength[rcx] ; set length of output string
mov rcx, StrBuffer[rcx] ; set address of output string
mov eax, BREAKPOINT_PROMPT ; set debug service type
int 2dh ; call debug service
int 3 ; required - do not remove
ret ; return
LEAF_END DebugPrompt, _TEXT$00
;++
;
; VOID
; DebugService2(
; IN PVOID Param1,
; IN PVOID Param2,
; IN ULONG Service
; )
;
; Routine Description:
;
; This function calls the kernel debugger to execute a command string.
;
; Arguments:
;
; Param1 (rcx) - Supplies the first parameter to the KD fault handler
;
; Param2 (rdx) - Supplies the second parameter to the KD fault handler
;
; Service (r8d) - Supplies a pointer to the command string.
;
; Return Value:
;
; None.
;
;--
LEAF_ENTRY DebugService2, _TEXT$00
mov eax, r8d ; set debug service type
int 2dh ; call debug service
int 3 ; required - do not remove
ret ; return
LEAF_END DebugService2, _TEXT$00
end