⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kdb_help.s

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 S
字号:
#include <ndk/asm.h>

.text

.globl _KdbEnter
_KdbEnter:
	/*
	 * Set up a trap frame
	 */
	pushfl			/* Eflags */
	pushl	%cs		/* Cs */
	pushl	$0		/* ErrorCode */
	pushl	%ebp		/* Ebp */
	pushl	%ebx		/* Ebx */
	movl	20(%esp), %ebp	/* Eip */
	movl	16(%esp), %ebx	/* Eflags */
	movl	%ebx, 20(%esp)
	movl	12(%esp), %ebx	/* Cs */
	movl	%ebx, 16(%esp)
	movl	%ebp, 12(%esp)
	pushl	%esi		/* Esi */
	pushl	%edi		/* Edi */
	pushl	%fs		/* Fs */
	pushl	$0		/* ExceptionList */
	pushl	$0		/* PreviousMode */
	pushl	%eax		/* Eax */
	pushl	%ecx		/* Ecx */
	pushl	%edx		/* Edx */
	pushl	%ds		/* Ds */
	pushl	%es		/* Es */
	pushl	%gs		/* Gs */
	movl	%dr7, %eax
	pushl	%eax		/* Dr7 */
	/* Clear all breakpoint enables in dr7. */
	andl	$0xFFFF0000, %eax
	movl	%eax, %dr7
	movl	%dr6, %eax
	pushl	%eax		/* Dr6 */
	movl	%dr3, %eax
	pushl	%eax		/* Dr3 */
	movl	%dr2, %eax
	pushl	%eax		/* Dr2 */
	movl	%dr1, %eax
	pushl	%eax		/* Dr1 */
	movl	%dr0, %eax
	pushl	%eax		/* Dr0 */
	leal	0x58(%esp), %eax
	pushl	%eax		/* TempEsp */
	pushl	%ss		/* TempSegSs */
	pushl	$0		/* DebugPointer */
	pushl	$3       	/* DebugArgMark (Exception number) */
	pushl	0x60(%esp)	/* DebugEip */
	pushl	%ebp		/* DebugEbp */

	/*
	 * Call KDB
	 */
	movl	%esp, %eax
	pushl	$1		/* FirstChance */
	pushl	%eax		/* Push a pointer to the trap frame */
	pushl	$0		/* Context */
	pushl	$0		/* PreviousMode (KernelMode) */
	pushl	$0		/* ExceptionRecord */
	call	_KdbEnterDebuggerException

	/*
	 * Pop the arguments and unused portions of the trap frame:
	 *   DebugEbp
	 *   DebugEip
	 *   DebugArgMark
	 *   DebugPointer
	 *   TempSegSs
	 *   TempEsp
	 */
	addl	$(11*4), %esp

	/*
	 * Restore/update debugging registers.
	 */
	popl	%eax		/* Dr0 */
	movl	%eax, %dr0
	popl	%eax		/* Dr1 */
	movl	%eax, %dr1
	popl	%eax		/* Dr2 */
	movl	%eax, %dr2
	popl	%eax		/* Dr3 */
	movl	%eax, %dr3
	popl	%eax		/* Dr6 */
	movl	%eax, %dr6
	popl	%eax		/* Dr7 */
	movl	%eax, %dr7

	/*
	 * Restore registers including any that might have been changed
	 * inside the debugger.
	 */
	popl	%gs		/* Gs */
	popl	%es		/* Es */
	popl	%ds		/* Ds */
	popl	%edx		/* Edx */
	popl	%ecx		/* Ecx */
	popl	%eax		/* Eax */
	addl	$8, %esp	/* PreviousMode, ExceptionList */
	popl	%fs		/* Fs */
	popl	%edi		/* Edi */
	popl	%esi		/* Esi */
	popl	%ebx		/* Ebx */
	popl	%ebp		/* Ebp */
	addl	$4, %esp	/* ErrorCode */

	/*
	 * Return to the caller.
	 */
	iret


.globl _KdbpStackSwitchAndCall@8
_KdbpStackSwitchAndCall@8:
        pushl   %ebp
        movl    %esp, %ebp
        
        movl    0x8(%esp), %eax         /* New stack */
        movl    0xC(%esp), %ecx         /* Function to call */
        movl    %esp, %edx              /* Old stack */

        /* Switch stack */
        movl    %eax, %esp
        pushl   %edx

        /* Call function */
        call    *%ecx

        /* Switch back to old stack */
        popl    %esp

        /* Return */
        popl    %ebp
        ret     $8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -