精华内容
下载资源
问答
  • windows内核调试模式的开启

    千次阅读 2011-08-27 13:33:21
    默认情况下,windows是不开启内核调试模式的。可以通过以下命令开启: bcdedit /debug ON 重启计算机器后windows内核就处于调试模式了; 在此模式下,有下安全性要求极高的软件是用不了的,如某些银行的网银系统...

    默认情况下,windows是不开启内核调试模式的。可以通过以下命令开启:

    bcdedit /debug ON

    重启计算机器后windows内核就处于调试模式了;

    在此模式下,有下安全性要求极高的软件是用不了的,如某些银行的网银系统。

    我们可以通过bcdedit /debug OFF 来关闭内核调试模式,同样需要重启计算机。

    展开全文
  • WINDOWS有两种访问模式:用户模式内核模式。用户模式下的代码不可以直接访问系统空间的数据,也不可以直接调用系统空间中的任何函数,否则会导致保护性错误。但用户程序可以通过调用系统服务来间接访问系统空间的...

    WINDOWS有两种访问模式:用户模式和内核模式。用户模式下的代码不可以直接访问系统空间的数据,也不可以直接调用系统空间中的任何函数,否则会导致保护性错误。但用户程序可以通过调用系统服务来间接访问系统空间的数据或者间接调用执行系统空间的代码。当调用系统服务时,调用线程会从用户模式切换到内核模式,调用结束后再返回到用户模式,也就是所谓额的模式切换,即上下文切换。在每个线程的KTHREAD结构中,有一个名为ContextSwitches的字段,专门用来记录这个线程模式切换的次数。

    模式切换是通过软中断或者专门的快速系统调用Fast System Call指令来实现的。


    使用INT 2E切换到内核模式

    下图是一个应用程序调用ReadFile API的过程。



    在用户模式切换到内核态之前,会做好一些工作:

    1. 权限检查,检查源位置和目标位置所在的代码段权限,核实是否可以转移

    2. 准备内核态使用的栈,为了保证内核安全,所有线程在内核态执行时都必须使用内核空间的内核栈,kernel stack, 一般大小是8KB或者12KB。


    快速系统调用流程



    逆向调用

    内核态的代码也可以调用用户态的代码,即所谓的逆向调用。逆向调用的过程大致如下,首先内核代码使用内核函数KiCallUserMode发起调用,接下来的执行过程与从系统调用返回时类似,不过进入用户态执行的是NtDll的KiUserCallbackDispatcher。然后会调用内核希望调用的用户态函数。当用户态工作完成后,执行返回动作的函数会执行INT 2B指令,触发一个0X2B异常,这个异常的处理函数是内核态的KiCallbackReturn函数,于是通过INT 2B异常,CPU又回到了内核态。

    展开全文
  • 为了防止普通的应用程序修改或访问临界区的操作系统的数据,Windows使用两种访问模式内核模式和用户模式。用户级别的应用程序代码运行在用户模式下,操作系统的代码运行在内核模式(比如系统服务和驱动)。内核...

    内核模式 VS 用户模式

    为了防止普通的应用程序修改或访问临界区的操作系统的数据,Windows使用两种访问模式:内核模式和用户模式。用户级别的应用程序代码运行在用户模式下,操作系统的代码运行在内核模式(比如系统服务和驱动)。内核模式下有权限访问所有内存和所有的CPU指令。内核模式比用户模式权限高的目的是保证系统的稳定性。

    注意:X86和X64处理器定义了4个级别的代码执行权限(也叫做ring)。第0级(Ring 0)是内核模式,Ring 3是用户模式。Windows只用这两个级别的原因是有些硬件架构只实现了这两个级别的执行权限(比如Compaq Alpha和Sillion Graphics MIPS)。

    虽然每个Windows进程都有自己的私有内存空间,但内核模式的系统代码和驱动代码共享一个单独的虚拟地址空间,虚拟内存中的每一页都标记了在什么访问模式下才可以读写。系统空间中的页只能被内核模式访问,用户模式访问用户模式的地址空间。只读内存页(比如存储静态数据的页)在任何模式下都不能写。另外,处理器支持非可执行内存区域保护,来防止在数据区域执行恶意或无意的代码。

    32位Windows不提供内核模式下对私有可读写内存区域的保护,换句话说,一旦在内核模式下,操作系统代码和驱动代码可以完全访问系统的所有内存并绕过Windows安全机制来访问某些资源。因为大量Windows操作系统代码运行在内核模式,所以一定要万分注意不要违反系统安全去执行某行代码而引起系统不稳定。加载第三方驱动代码的时候也要格外小心,因为一旦进入内核模式,所有系统级的代码都可以访问。所以Windows引入了驱动签名机制,如果用户安装没签名的驱动时,系统会报警告。

    在64位Windows上,内核模式的代码签名条款规定任何64位的驱动代码必须要用官方给的密钥来签名(KMCS),而且用户不能强制安装未签名的驱动代码,即使是管理员权限也不行。但是有一个例外,那就是在启动时按F8进入boot选项,可以禁止强制驱动签名,如果这样设置了的话,桌面的壁纸上就会有水印,而且数字版权管理(DRM)功能会被禁止。

    普通应用程序调用系统服务的时候可以从用户模式切换到内核模式,比如读文件的功能最终还是需要调用操作系统的Readfile()函数,这就会切换到内核模式。这种转换用一个特殊的CPU指令进入到内核模式去执行Ntoskrnl.exe或Win32k.sys中的函数。在返回到用户模式的线程之前,会回到用户模式。操作系统就是用这种方式来保护系统数据的。

    注意:从用户模式切换到内核模式不会影响线程调度。

    所以,用户线程的时间一部分花在用户模式下,一部分花在内核模式下是很常见的。事实上,因为大量的图形和系统代码运行在内核模式,图形计算集中的程序会更多地执行在内核模式,可以微软的画图板程序来测试在哪个模式下执行的多。而D2D技术则大量的运行在用户模式下,只会发送少量的原始表面数据给内核来减少在两个模式下的转换。

    有一个叫做csrss.exe的进程是专门负责原始输入的,比如鼠标,键盘,如果晃动一下鼠标会影起内核模式下csrss进程的活动。
    有一个叫做idle的进程有时会占100%的CPU,其实它是一个假的进程,当CPU空闲的时候执行。

    终端服务和多会话

    终端服务指的是Windows提供了在单个系统上与多个用户交互的功能。远程用户可以使用终端服务与机器建立一个会话(Session),登陆,并且在服务器上运行程序。服务器将图形界面传输给远程用户(还可以传声音和剪贴板),远程用户传输用户的输入给服务器。

    第一个建立的会话会被认为是服务会话,或者叫做Session0,包括系统服务宿主进程。Session0是服务器本机的控制台,其他Session可以通过远程桌面连接(mstsc.exe)或快速用户切换来登陆。
    Windows客户端版本允许一个远程用户连接,如果有人登陆,其他人就不能操作了,当有其他人再登陆的时候,当前用户又被锁住。
    Windows带MediaCenter的版本允许4个扩展会话,Windows服务器支持同时连接两个远程用户。
    所有的windows客户端版本都支持在本地通过快速用户切换功能建立多个会话(开始->切换用户),切换后会话仍然活动状态。


    对象和句柄

    在Windows下,一个内核对象指的是静态定义的“对象类型”的运行时实例。

    对象类型包括:

    • 系统定义的数据类型
    • 操作数据类型的实例的函数,
    • 一些对象属性。
    进程,线程,文件,事件对象,这些都是Windows创建和管理的底层对象。
    进程是进程对象类型的实例。
    文件是文件对象类型的实例。
    等等。
    对象属性是对象中的一个字段,包括进程ID,调度优先级,访问令牌的指针。
    对象函数,指的是行为对象,比如读取或改变对象的属性。

    对象和普通数据结构最根本的区别是对象的数据结构是不透明的,必须调用对象的服务才能访问其数据,而不能直接访问其内部的数据。
    对象管理器提供了一个方便的方式来完成四大系统任务:

    • 给系统资源提供一个人类认识的名字。
    • 在进程中共享资源和数据。
    • 禁止对资源未授权的访问。
    • 引用计数。让系统知道什么时候该回收对象。
    不是所有的数据结构都是对象。只有需要共享,保护,命名,使用户模式可见的程序才放进对象中。只实现了内部功能的数据结构不是对象。

    安全

    Windows最初的设计目标是为了满足各种政府部门的规定和行业安全级别,比如CCITSE。

    Windows的核安全功能包括:

    • 对于系统对象(如文件,目录,进程,线程等)的自主或强制的保护。
    • 安全审核。
    • 用户登陆时的身份验证。
    • 防止用户访问其他用户已经释放的资源但还未初始化的资源(如未分配的内存或空闲的磁盘空间)。

    Windows对于对象有三种形式的访问控制:

    1. 任意访问的控制机制 -- 对象的拥有者可以分配权限给他人或拒绝他人访问这个对象。当用户登陆系统后,会得到一个安全上下文,访问对象时,会查看对象的安全控制列表中有没有权限。
    2. 特权访问控制 -- 确保当找不着对象的拥有者时,仍然可以访问受保护的对象。比如有些文件的创建者已经离职,管理员需要一种方式去获得文件的访问权限。这时,管理员可以取得文件的拥有权。当重装系统时以前文件的扔有者丢失也会遇到这种情况。
    3. 强制控制 -- 当同一个用户访问时可以给需要保护的对象加更多的安全控制,比如在IE上对每个用户实行隔离保护模式,以及保护由提权得到管理员权限的用户建立的对象不受非提权的管理员访问。

    注册表


    注册表是Windows的系统数据库,包括启动信息和系统配置,软件配置,安全数据库,每个用户的配置。
    另外,注册表也是查看内存中可变数据的窗口,比如当前的硬件状态(比如设备驱动加载,资源使用等),以及性能计数器。
    虽然很多Windows用户和管理员从不直接看注册表,但它确实是查看系统信息的一个很有用的工具。


    Unicode

    Windows与其他操作系统不同之外在于Windows上大多数字符串都是以16位宽的Unicode字符来处理的。Unicode是国际标准的字符集。

    因为很多程序以8位ANSI字符集来处理,很多Windows函数支持两个入口,一个是Unicode版本(16位宽字符)的一个是ANSI版本(8位窄字符)的。如果你调用窄字符的版本,会有一点效率影响,因为系统在处理前会转换成Unicode,然后输出时再转换成ANSI。但是Windows不会在文件中将ANSI转换成Unicode。怎么存到文件中由程序自己控制。

    不用考虑语言,因为所有版本的Windows包含同样的函数,而不是每一个国家的语言单独用一个版本。



    内核调试

    内核调试的意思是查看内核数据结构,单步跟踪函数的执行情况。是研究Windows内核的重要方式。

    符号文件和内核调试

    符号文件包括函数名称,变量,数据结构的布局。由linker生成,用来在调试时显示。这些信息不会包含在可执行的二进制文件里,因为二进制文件是很小很快的。当调试时,会将符号文件与二进制文件关联起来。要使用内核调试工具,必须有正确的内核符号文件,Ntoskrnl.exe。符号表文件必须匹配。例如,如果安装了的Windows补丁包更新了内核,符号文件也得匹配。可以下载所有Windows版本的符号表,但没有更新符号表的补丁包,最简单的方式是用微软的符号文件服务器。
    用下列命令保存复本到 c:\symbols folder 

    srv*c:\symbols*http://msdl.microsoft.com/download/symbols

    更多帮助在 http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx

    Windows调试工具

    WindowsSDK里最新的调试工具,这些工具用在用户模式和内核模式。

    注意:这上结调试工具经常更新,而且与Windows的版本相关,所以最好下载最新版本。

    用户模式调试

    调试工具可以附加一个用户模式的进程来查看或修改其内存。附加的时候有两个选项:

    • 侵入式(Invasive ),调试时Windows会在调试器和程序间建立一个连接,可以修改程序的内存,设置断点,停止调试而不杀死进程,直到退出附加。
    • 非侵入(Noninvasive ),不附加进程,不能设置断点,也可以通过打开用户模式进程的dump文件。

    内核模式调试

    有两种工具用来调试内核:

    • kd.exe,命令行工具。
    • Windbg.exe,GUI工具。

    有三种方式可以用来调试内核:

    • 打开崩溃dump文件。
    • 连接到系统。需要使用两台电脑。可以用IEEE1394或USB来连接到目标电脑,目标系统必须可以boot到debug模式(可以用F8或bcdedit或msconfig),也可以用命名管道连接(比如hyper-V,Virtual PC,VMWare)。
    • 也可以连接到系统,这种方式叫做本地内核调试,可以用WinDbg,文件->Kernel Debug->local。但是系统必须是boot到bebug模式下的。

    Windows Driver Kit

    虽然WDK的目标是设备驱动开发人员,但它也是Windows内核信息的重要来源。
    WDK的文件包含所有内核函数和机制详细的描述。除了文档,还有头文件(如ntddk.h, ntifs.h, wdm.h)。
    所以要想深挖I/O系统和设备驱动,读WDK文档是必须的,特别是内核模式驱动架构设计指南和引用手册。以及《微软Windows驱动模式编程》,Walter Oney ,《Windows驱动开发基础》,Penny Orwick 和 Guy Smith。

    展开全文
  • 一、将系统设置为调试模式 二、关闭系统的驱动签名校验。 服务的基本操作 服务管理器:管理系统上的所有服务,创建、注册、修改、启动服务。 所以我们编写程序的时候,首先要打开服务管理器。其API为: SC_HANDLE ...

    内核驱动运行、调试

    驱动的运行

    由于Windows数字签名的原因,没有签名或者使用测试签名的都不能放到64位系统上运行。
    两个解决办法。
    一、将系统设置为调试模式
    二、关闭系统的驱动签名校验。

    服务的基本操作

    服务管理器:管理系统上的所有服务,创建、注册、修改、启动服务。
    所以我们编写程序的时候,首先要打开服务管理器。其API为:

    SC_HANDLE WINAPI OpenSCManager(
    	LPCTSTR lpMachineName, //字符串常量,表示机器名字,传NULL就是本机器
    	LPCTSTR lpDatebaseName,	//同,数据库的名字,NULL代表打开的是活动数据库
    	DWORD dwDesiredAccess	//权限
    	);
    

    权限一般有 SC_MANAGER_CREATE_SERVICE 创建服务
    SC_MANAGER_ENUMERATE_SERVICE 枚举服务
    SC_MANAGER_ALL_ACCESS 一切权限
    函数的返回值是一个SC_HANDLE 为服务管理器的句柄

    关闭句柄的函数

    CloseServiceHandle(SC_HANDLE PARAM);
    

    创建一个服务使用的函数

    SC_HANDLE WINAPI CreateService(
    	SC_HANDLE hSCManager,	//服务管理器句柄
    	LPCTSTR lpServiceName,	//创建的服务名字,唯一性
    	LPCTSTR lpDisplayName,	//服务的显示名字,不唯一
    	DWORD dwDesiredAccess,	//服务的权限,见下方
    	DWORD dwServiceType,	//创建何种类型的服务,见下方
    	DWORD DWStartType,		//服务的启动方式
    	DWORD dwErrorControl,	//错误控制
    	LPCTSTR lpBinaryPathName,	//服务对应的可执行文件的全路径,也就是sys文件路径
    	LPCTSTR lpLoadOrderGroup,	//服务所在分组的名字
    	LPDWORD lpdwTagId,			//分组内该服务的启动顺序
    	LPCTSTR lpDependencies,		//需要依赖其他服务名的列表
    	LPCTSTR lpServiceStartName,	//加上下面那个,表示以什么身份启动服务
    	LPCTSTR lpPassword
    	)
    

    打开服务使用的函数

    SC_HANDLE WINAPI OpenService(
    	SC_HANDLE hSCManager,
    	LPCTSTR lpServiceName,
    	DWORD dwDesiredAccess
    	);
    

    返回的是这个服务的句柄。

    服务的启动与停止

    BOOL WINAPI StartService(
    	SC_HANDLE HService,
    	DWORD dwNumServiceArgs,	//启动所传的参数
    	LPCTSTR *lpServiceArgVectors
    	)
    

    停止、暂停、恢复服务

    BOOL WINAPI ControlService(
    	SC_HANDLE hService,
    	DWORD dwControl,	//控制码,表示需要对服务进行何种操作
    	LPSERVICE_STATUS lpServiceStatus	//返回参数,表示服务当前最新状态
    	)
    

    服务的删除

    	BOOL WINAPI DeleteService(
    	SC_HANDLE hService
    	)
    

    服务创建打开并运行程序示例:

    #include<Windows.h>
    #include<cstdio>
    
    #define SER_NAME TEXT("FirstDriver")
    
    int main() {
    	SC_HANDLE hSCM = NULL;
    	SC_HANDLE hSer = NULL;
    	do {
    		hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
    		if (hSCM == NULL) {
    			break;
    		}
    		hSer = CreateService(
    			hSCM,
    			SER_NAME,
    			SER_NAME,
    			SERVICE_ALL_ACCESS,
    			SERVICE_KERNEL_DRIVER,
    			SERVICE_DEMAND_START,
    			SERVICE_ERROR_IGNORE,
    			TEXT("路径"),
    			NULL,
    			NULL,
    			NULL,
    			NULL,
    			NULL);
    		if (hSer == NULL) {
    			DWORD dwErrorCode = GetLastError();
    			if (dwErrorCode == ERROR_SERVICE_EXISTS) {
    				hSer = OpenService(hSCM, SER_NAME, SERVICE_ALL_ACCESS);
    				if (hSer == NULL) {
    					//填写打开失败处理函数
    					break;
    				}
    			}
    			else {
    				break;//发生了别的错误
    			}
    		}
    		printf("createservuce or openservice success\n");
    		getchar();
    		//准备启动
    		BOOL bSucc = StartService(hSer, NULL, NULL);
    		printf("startservice:%u\n", bSucc);
    		getchar();
    		SERVICE_STATUS SerStatus = { 0 };
    		bSucc = ControlService(hSer, SERVICE_CONTROL_STOP, &SerStatus);
    		printf("controlservice:%u\n", bSucc);
    		getchar();
    		//删除服务
    		DeleteService(hSer);
    	}while (FALSE);//类似于goto语句,防止代码冗余
    
    	if (hSCM != NULL) {
    		CloseServiceHandle(hSCM);
    		hSCM = NULL;
    	}
    	if (hSer != NULL) {
    		CloseServiceHandle(hSer);
    		hSer = NULL;
    	}
    	return 0;
    }
    
    展开全文
  • 把操作系统配置成调试模式,调式模式的系统,默认允许未签名的驱动运行 l临时关闭系统驱动签名校验,在开机时修改启动参数 对于Windows 7操作系统来说,开机时可以在键盘上按 F8 键,选择禁用驱动程序签名强制 ...
  • Windows操作系统的内核调试方法

    千次阅读 2011-03-12 12:29:00
    当我们想要调试操作系统时,可以修改操作系统启动参数,方法有二,一是在系统启动时F8下,选择调试模式,二是,在启动后,修改启动配置参数。Windows xp /2003 使用 boot.ini 存储启动参数,Windows Vista / 7使用...
  • 使用WinDbg调试Windows内核(二)

    千次阅读 2016-03-25 10:29:39
    使用WinDbg调试Windows内核(二) 上篇文章介绍了windbg调试内核的基本环境设置以及一些基础调试技巧,这篇文章介绍一些windbg的高级调试技巧。 0×01使用断点跟踪数据 断点通常用在暂停某个我们感兴趣的...
  • windows内核模式下隐藏进程

    千次阅读 2012-12-19 17:07:04
    1、在内核模式下,系统为每个进程维护了一个EPROCESS结构体,系统所有的进程是通过EPROCESS结构体中的一个ActiveProcessLinks指向的双端链表连接起来的,通过winDBG内核调试工具就可以发现并获取其相对于EPROCESS...
  • 使用WinDbg内核调试

    千次阅读 2014-05-10 10:26:22
    本教程的目标是给予一个已经有其他调试工具使用经验的开发者足够信息,使其能通过参考WINDOWS调试工具的帮助文件进行内核调试。 本文将假定开发者熟悉一般WINDOWS操作系统和进程的建立过程。 本文的重点是集成...
  • 内核调试工具笔记

    2017-04-25 20:16:00
    作者:精灵(^_^)/淘气鬼Windows调试员工具包自带有4个不同的调试器微软控制台调试器:cdb.exe 用于调试用户模式的应用程序运行于基本的控NT符号调试器 NTSD.exe 命令行制台微软内核调试...
  • 修复此问题 禁用内核调试,在 Visual Studio 中调试。 - 或 - 使用内核调试器而不是 Visual Studio 进行调试。...复制代码 Kdbgctrl.exe -d对所有会话禁用内核调试 (Windows Vista) 在命令提示处,键入: 复制代...
  • wrk内核调试总结

    2019-11-10 12:43:38
    1 在x86也就是32位系统的条件下,在网上下载两个系统文件msvcp71.dll、msvcr71.dll,放到虚拟机的windows/system32的路径下 ...4 一定要先开虚拟机 选择调试模式 然后再打开windbug 5 在windb...
  • 本实验中引入了 WinDbg 内核调试器。 WinDbg 用于调试 Echo 内核模式的示例驱动程序代码。 实验目标 本实验包含以下练习:引入调试工具、介绍常见调试命令、阐述断点的用法,以及演示调试扩展的用法。 在本实验中...
  • 目标:VM –>...--WinDbg/VS2012 利用PIPE实现VM和VM所在的HOST通讯,从而实现在HOST上安装的WinDbg程序...http://msdn.microsoft.com/en-US/library/windows/hardware/jj200334(v=vs.85) ß设置HOST主机调试VM操作...
  • 参考这两天对某P双机调试的学习及成果...0x01 内核调试全局变量 根据软件调试第十八章,windows启动过程中会调用两次KdInitSystem()函数 第一次调用KdInitSystem分别会初始化如下变量 1.KdPitchDebugger : Boole...
  • Windows内核文章索引

    千次阅读 2013-07-22 23:15:08
    内核术语--服务,函数,Routine,进程,线程,作业,Fiber,虚拟内存内核术语--内核模式,用户模式,内核对象,内核调试Windows系统架构 Windows的系统组件 Windows进程数据结构及创建流程 线程与进程 Win32...
  • 使用WinDbg调试内核

    千次阅读 2019-03-24 16:25:46
    **驱动与内核代码:**Windows设备驱动简称为驱动,他让第三方开发商在Windows内核模式下运行代码。驱动程序常驻与内存,并且负责响应用户态程序的请求,而且应用程序不直接与驱动程序通信,而是直接访问设备对象,向...
  • Windbg进行内核调试,需要一些基本的技巧和设置,在这个系列文章中,我将使用Windbg过程中所遇到的一些问题和经验记录下来,算是对Kernel调试的一个总结,同时也是学习Windows系统内核的另一种过程。...
  • windbg view 下载地址:...我在虚拟机安装的系统为 win10 x64 在win10 x64 系统下需要在调试模式下注册签名 注册签名地址为:https://download.csdn.net/download/qq_36088602/12158395 里面有Windows 64S...
  • Win64AST专用于64位 Windows 的 ARK 类工具,能够查看并管理64位 Windows 系统的各种内核信息,可用于手工杀毒、辅助调试内核研究等。 Rootkit 通常是指加载到操作系统内核中的恶意软件,因为其代码运行在特权...
  • Windows 调试程序 (WinDbg) 可用于调试内核模式和用户模式代码、分析故障转储以及在代码执行时检查 CPU 寄存器。
  • 不错的关于windows平台下用户模式调试器的原理  所谓调试器实际上是一个很宽泛的概念,凡是能够以某种形式监控其他程序执行过程的程序,都可以泛称为调试器。在Windows平台上,根据调试器的实现原理大概可以将之...
  • 1.3.5 设置Windows内核符号表 12 1.3.6 实战调试first 13 第2章 内核编程环境及其特殊性 16 2.1 内核编程的环境 16 2.1.1 隔离的应用程序 16 2.1.2 共享的内核空间 17 2.1.3 无处不在的内核模块 18 2.2 数据...
  • 《软件调试第二版:卷1硬件基础》 中的第2.44章 控制寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 和Cr4,在64位模式下还有个Cr8 Control registers (CR0, CR1, CR2, CR3, and CR4; see ...
  • 从汇编语言到Windows内核编程.pdf 【完整书签】【高清版】(共282页) ============================================ 入手篇 熟悉汇编 第1章 汇编指令与c语言 1.1 上机建立第一个工程 1.1.1用visual studio创建工程...
  • 寒江独钓-Windows内核安全编程总结

    千次阅读 2010-10-04 15:27:00
    4:使用WinDbg,利用串口和虚拟机通信,将目标系统设置为调试模式启动,这样就可以调试系统了。需要设置WinDbg的内核符号表路径,这样可以实现源码级内核调试。 <br />特殊宏: IN,OUT:输入输出 _...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 183
精华内容 73
关键字:

windows内核调试模式