成都创新互联科技有限公司长沙seo推广营销
成都创新互联科技有限公司,长沙seo推广营销,电影网站开发需要多少钱,wordpress 背景特效插件一#xff1a;背景 一直在用 WinDbg 调试用户态程序#xff0c;并没有用它调试过 内核态#xff0c;毕竟不是做驱动开发#xff0c;也没有在分析 dump 中需要接触用内核态的需求#xff0c;但未知的事情总觉得很酷#xff0c;加上最近在看 《深入解析 Windows 操作系统》…一背景 一直在用 WinDbg 调试用户态程序并没有用它调试过 内核态毕竟不是做驱动开发也没有在分析 dump 中需要接触用内核态的需求但未知的事情总觉得很酷加上最近在看 《深入解析 Windows 操作系统》 一书书中有不少案例需要深入到 内核态 所以这篇准备整理一下如何用 WinDbg 调试 C# 内核态吧。操作环境Windbg Preview宿主机Windows 10虚拟机Windows 10二搭建内核态调试 1. 基本原理操作系统的引导程序 BootMgr 和 WinLoad 内置了调试模式支持以 COM 接口互通所以我们需要先添加一种可供调试的启动项供引导程序 BootMgr 启动时弹框让我们选择。2. 配置调试启动项大家可以在 https://msdn.itellyou.cn/ 下载一个完整版的 Window10 ISO 包这里就不细说了启动虚拟机进入 Windows10 以管理员模式打开 CMD 窗口执行如下 四条命令 来编辑 bcd (Boot Configuration Data)。bcdedit /dbgsettings serial baudrate:115200 debugport:1
bcdedit /copy {current} /d WinDbg
bcdedit /displayorder {current} {ID}
bcdedit /debug {ID} ON注意一下这里的 {ID} 是 CMD 上生成的 GUID这是你的启动项唯一键别名是 WinDbg 在我的界面上大概是这个样子3. 配置 COM 接口这里有几个步骤要注意了大致如下1 把打印机选项移除了因为它占用了 COM1 接口。2 新增一个 串行端口。3在 使用命名管道 中填入 \\.\pipe\com_1, 同时勾选 轮询时主动放弃CPU。设置完之后点击确定完整截图如下4. 配置 Windbg Preview我们把 WinDbg 打开选择 Attach to kernel 选项然后选择 COM 模式设置 Baud Rate 115200 然后是 Port\\.\pipe\com_1 配置完之后点击 OK, 完整截图如下如果一切正常的话Windbg 应该是如下输出等待COM连接状态。Microsoft (R) Windows Debugger Version 10.0.25136.1001 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.Waiting for pipe \\.\pipe\com_1
Waiting to reconnect...5. 启动虚拟机这些都配置完之后我们重新启动虚拟机在 BootMgr 阶段会出现两个引导项其中一个就是在 小项2 时配置的我们选择它就好了完整截图如下稍等片刻后 WinDbg 会显示连接成功在进入初始化时会 int 3 中断, 如果你真的到了这一步那恭喜你Microsoft (R) Windows Debugger Version 10.0.25136.1001 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.Waiting for pipe \\.\pipe\com_1
Waiting to reconnect...
Connected to Windows 10 10240 x64 target at (Thu Sep 1 23:23:35.235 2022 (UTC 8:00)), ptr64 TRUE
Kernel Debugger connection established. (Initial Breakpoint requested)************* Path validation summary **************
Response Time (ms) Location
Deferred srv*c:\mysymbols_fix*https://msdl.microsoft.com/download/symbols
Error D:\net5\ConsoleApp1\Debug
Deferred srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols
Symbol search path is: srv*c:\mysymbols_fix*https://msdl.microsoft.com/download/symbols;D:\net5\ConsoleApp1\Debug;srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols
Executable search path is:
Windows 10 Kernel Version 10240 MP (1 procs) Free x64
Edition build lab: 10240.17394.amd64fre.th1_st1.170427-1347
Machine Name:
Kernel base 0xfffff802a3c7b000 PsLoadedModuleList 0xfffff802a3fa0070
System Uptime: 0 days 0:00:00.092
nt!DebugService20x5:
fffff802a3dcfca5 cc int 3因为是初始化中断接下来在 WinDbg 命令面板中先用 g 执行让操作系统继续跑下去,稍等片刻就会进入到 Windows 10 的操作界面。6. netcore 测试前段时间写了一篇文章聊到了 ReadFile 从用户态切到内核态的过程还画了一张图。现在可以调试 内核态 那何不试试看呢哈哈说干就干先上一段测试代码。static void Main(string[] args){var i 0;File.WriteAllText(C:\1.txt, hello world!);while (true){var str File.ReadAllText(C:\1.txt);Console.WriteLine(${i}, content{str.Length});Thread.Sleep(1000);}Console.ReadLine();}为了方便观察用户态栈我在虚拟机中的 Windows10 系统上安装一个 WinDbg10目的就是拦截 ntdll!NtReadFile 函数时输出 用户态栈。bp ntdll!NtReadFile k 10;gc可以看到每次只要程序输出一次windbg10 都能成功拦截接下来在宿主机的 WinDbg Preview 中先输入 .reload 重新加载下符号目的就是方便看到用户态上的 ntdll.dll 函数名但不一定好使碰碰运气吧接下来输入 nt!NtReadFile 观察内核态栈。bp nt!NtReadFile从新老Windbg截图中可以清晰的看到这个的 Child-SP 线程栈终于对接上了也就验证了图上所说:ntdll!NtReadFile (用户态网关) - nt!KiSystemServiceCopyEnd内核态调度中心 - nt!NtReadFile 内核态处理函数。好了本篇就先说这么多希望对大家有帮助也是对自己的一个总结。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87545.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!