Windows 内核之双机调试与windbg命令大全
在今后会有相当的实验环节,对于windows内核实验,调试环境是必不可少的,本章讲解双机调试的环境搭建与常见的WINDBG指令。
准备材料:
VMware workstation : [https://www.vmware.com/go/downloadworkstation-cn]
windows 7 x64 ISO (请使用种子下载工具进行下载):
[ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|3420557312|B58548681854236C7939003B583A8078|/]
windbg: [https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools]
安装过程:
首先安装Vmware workstation pro,运行后无脑下一步就OK。
安装完成后界面如
接下来创建win7虚拟机,下一步到此画面,选择win7 ISO镜像
虚拟机较大,注意存储位置是否足够放下大概会占用20~40GB的空间
如需修改则作调整
在自定义硬件中需要注意内存大小适中,核心暂时定为1个,因为在练习时多核CPU有时会影响练习结果,并且多核上有些数据结构是一个核心一个,所以操作起来相对麻烦。
接下来重要的一点:添加一个串口
配置为此,注意另一端是应用程序,而非虚拟机
安装中
安装完成后开始配置windows 调试启动模式
接下来配置调式模式设置,一定要注意右下角串口端口,当前端口是2那么设置的调式端口就是2。
为方便今后调试,将调试启动项设置为默认启动项
至此windows启动项设置结束~
设置windbg调试器的快捷方式参数
“<windbg的路径>\windbg.exe" -b -k com:pipe,port=//./pipe/com_WIN7_64,baud=115200,resets=0 -y SRV*<符号存储的路径>*http://msdl.microsoft.com/download/symbols
测试调试环境
重启win7虚拟机,在vmware 加载完毕后 启动windbg快捷方式,windbg将会与windows 建立调试连接
windows将等待windbg的下一条指示,此时windows 将会被调试器挂起。
输入 g 指令后,windows将继续运行。
至此win7 与 windbg 的双机调试环境搭建完毕。
接下来了解下windbg的基本操作,以及注意事项
WINDBG 内核调试常用指令
扩展指令!process 0 0 枚举进程 (全局句柄表 CID 下标)!thread 枚举当前进程线程 (EPROCESS ActiveThread 链表)!handle 枚举当前进程句柄对象信息(EPROCESS 本地句柄表)!frame 调用帧!devobj 设备对象(句柄表)!fileobj 文件对象(句柄表)!drvobj 驱动对象(句柄表)!findhandle 对象所有引用信息(来自EPROCESS 句柄表)!idt 检索idt表(来自KPCR)!sw 切换当前处理器模式 32 <=> 64 !sym 显示当前符号设置!drivers 显示所有驱动模块 (NtQuerySystemInformation SystemModuleInformation)!pte 查找虚拟地址对应得PTE (EPROCESS->CR3)!dml_proc 遍历所有进程及指定进程的线程,多数DML格式!vad 进程内存段信息 (EPROCESS->VADRoot)!vtop [PageDir,0] VA 显示虚拟地址的PML4E, PDPE, PDE, PE, PhyAddr (解析地址为页表下标)!pcr 查看所有CPU结构信息(KPCR),通过FS(x86) GS(x64)获取!poolused 查看当前系统分配pool与pool tag信息(用来查找未释放堆非常合适)内部指令.process 切换进程 (AttachProcess).thread 切换线程 k* 调用栈u 反编译 ,L行数f 反编译整个函数,/i当前反编译指令数,/c搜索函数内的callb 向前反编译r BIOS Real mode 代码up 对物理地址反编译r 寄存器操作p 步过t 步入gu 步出gc 运行bp 断点bp address "j()'';''" 条件断点s 查找s -sa 查找ascii 字符串s -su 查找unicode 字符串s -v 查找c++的类s BaseAddr LSize '字' 0xff "字符串"s -[w] 只查询可写数据区域s -b,w,d,q byte,word,dword,qword 四种数据范围bp address ".if(){}.elif(){}.else{}"# 查询反编译窗口中的任何字符,正则符号注意转义~s 切换当前处理器. 当前线程# 当前出现异常,调试时间的线程* 所有线程number 指定线程|s 设置当前进程(仅在用户模式下使用)||s 设置当前系统(仅在多调试模式下使用)?? 计算传入的C风格表达式.expr 全局表达式的语言格式/q 查看支持的语言/s 设置当前解析语言? 计算表达式bl 断点列表bc 删除断点bd 禁用be 启用d 查看b/w/d/q byte word dword qworda asciiu unicodeg 读取段选择子信息l
st 套入指定结构体,-r 递归查看深度(默认为1).cxr 切换到异常发生地(参数为异常产生的 _CONTEXT 结构地址)xs* 为指定调试事件或异常指定操作方法,或中断sxe 为指定异常做处理xsd,xsn,xsi 不为指定异常处理iml 初始化模块加载 (仅内核使用)ibp 初始化断点out 指定应用程序输出ld 模块加载ud 模块卸载cpr 创建进程epr 进程退出ct 创建线程et 线程退出ser 系统错误rdmsr 读取MSR寄存器wrmsr 写入MSR寄存器wt 追踪所有调用 usermode:(all), kernelmode:(only x86).load wow64exts 加载wow64拓展功能.reload 重新加载模块/d 重新加载调试器模块列表中的所有模块/f * 强制调试器立即加载指定文件的符号/s 重新加载系统的模块映射列表中所有模块,如果应用层使用模块名称,则必须使用/s/user 仅仅重新加载应用层符号 /u 卸载所有模块/w 不展开通配符.browse 单指令窗口,不干扰主窗口,可支持退回.cache forcedecodeuse 清空缓存,强制写入内存.dump 创建Dump文件.chain 查询windbg当前加载的库与插件.extmatch cmd 查询windbg所有模块的拓展指令/e mod 枚举或查询指定模块的指令.attach 挂接进程.detach 取消挂接.beep 响一下 .time 显示会话开始时间与目标主机时间.asm 设置反调试属性.url 网页跳转指令.dml_flow 寻找附近的代码,跳转来源与将跳转地址/// 脚本语句 ///@"string\\" => string\\ 字符串不做转义
. 某些语境下代表r/eip
.printf [option] format [,arg1,...]/od debug/oD debug prompt/oe error/on normal/op prompt/oP prompt resigter/os symbols/ov verbose/ow warnningformat:%p pointer%N 32bit or 64bit pointer%I (any 64 bit)ULONG64%ma ascii string%mu unicode string%msa ANSI_STRING string%msu UNICODE_STRING string%y symbols information%ly symbols and source line informationas 别名/ma str 转换成ansi字符串表示/mu str 转换成unicode字符串表示/msa str 转换成ANSI_STRING结构/msu str 转换成UNICODE_STRING结构/x 1+2 数值,在.echo 中如果要.echo输出,需要放在.block下/f E:\... 读出文件内容/c code 代码,需要整段代码,引用时将标识符转换为代码
al 列出所有别名
ad * 删除(所有)别名
${as} 展开as宏
${/d:as} 是否定义as宏
${/n:as} as宏名称本身
${/f:as} 展开as宏,不存在则为空j 类似.if,语法:j bool 表达式1;表达式2
z 类似于.do{}(),语法:表达式1;z(bool).sleep 暂停n毫秒
.block 块展开as宏
.if 如果 ,语法 .if( bool ){}
.elsif 否则如果,语法 .if(bool){}.elsif(bool){}
.else 否则 ,语法 if(bool){}.else{}
.break 跳出循环
.continue 结束本次循环
.do do-while,语法 do{}(bool)
.for 语法:for(init;bool;add){}
.foreach 对指令执行结果的每一个单词传入标识符,语法:foreach(标识符 {指令}){.echo "标识符"}/s 对字符串的每一个单词传入标识符,语法:foreach(标识符 "字符串"){.echo "标识符"}/f 对文件内容每一个单词传入标识符,语法:foreach(标识符 文件路径){.echo "标识符"}.catch 异常捕获 .catch{代码}
.leave 退出到.catch外.openlog file 打开日志
.logclose 关闭日志
.logfile 查看当前日志文件poi 取地址值,语法 poi(address)预定义函数宏 masm 内置宏
$iment 通过模块获得入口点,语法:$iment(Address))
$scmp 字符串对比,C++: strcmp
$sicmp 字符串对比,C++: stricmp
$spat 正则,语法 $spat("str", "pattern")
$vvalid 探测内存有效性,语法:$vvalid(Address,lenght)C 内置宏
#CONTAINING_RECORD(Addr, Type, Field) LIST_ENTRY结构寻址
#FIELD_OFFSET(Struct, Field) 取得字段偏移
#RTL_CONTAINING_FIELD(Struct, Size, Field) 字段是否在大小范围内
#RTL_FIELD_SIZE(Struct, Field) 字段大小windbg预定义宏 $ntnsym nt$ntwsym ntdll$ntsym 当前环境来决定是ntdll还是nt$exentry 进程入口点$proc EPROCESS$thread ETHREAD$peb PEB$teb TEB$tpid 进程ID$tid 线程ID$bp id 断点对应地址DML Debuggee markup language/// DML (Debuggee Markup Language) ///
相关指令.dml_start filename 解析文件内容为DML,并且打印.dml_flow address1 address2 从address1开始,有多少个地址访问到从address2,和将要跳转到哪。相关标签<link cmd="command"> Descriptor </link> //链接<b></b> //粗体<i></i> //斜体<u></u> //下划线<col fg bg></col> //设置子图颜色<exec cmd=""></exec> //指令执行<altlink name cmd/> //右键菜单下
Windows 内核之双机调试与windbg命令大全相关推荐
- 寒江独钓Windows内核编程-双机调试1
今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大.我使用的书是<寒江独钓Wind ...
- 双机调试和windbg的命令
各位大牛以及和我一样还是菜鸟的朋友们,大家好,今天在调试驱动程序时,由于要做双机调试,所以顺便再论坛发给以后需要的朋友,相对网上其他教程我的这个 算是比较详细了,因为我是看了网上很多相关文章,他们多多 ...
- 【双机调试】WinDbg+Win7虚拟机双机调试详细步骤
一.下载安装配置虚拟机 1.下载安装 VMware Workstation Pro 本文只接受VMware虚拟机,搜索VMware Workstation 下载最新安装包,在本机安装.下载地址:Dow ...
- Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)
简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...
- windbg+VM 设置内核调试环境(双机调试)
虚拟机是XP情况: 启动项添加调试启动,并设置波特率为115200 具体操作可在boot.ini中添加如下代码: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS ...
- 【驱动开发】WinDbg 双机调试 Windows XP
起序:最近学习驱动开发,环境搭建,记录一下. 一.软件环境 宿主机:Windows 10 虚拟机:VMware Workstation 16.1.1 Pro 系统:windows_xp_profess ...
- win7 x64 windbg 双机调试
-------------------------------------------------------------- 转自http://yexin218.iteye.com/blog/5451 ...
- win7 x64驱动开发经验(三)windbg 双机调试配置 、问题及解决办法
win7 x64驱动开发经验(三)windbg 双机调试配置 .问题及解决办法 http://www.cnblogs.com/witty/archive/2012/04/23/2466024.html ...
- VirtualKD加速windbg双机调试速度
原文的标题是:VirtualKD + VMWare实现单机内核调试.我觉得不是很妥当,毕竟双机调试是OS自己实现的,不依赖VirtualKD,所以就改成了这个标题.不过出于对作者的尊重,正文中我还是会 ...
最新文章
- spring aop实现log 日志跟踪
- 就是你把所有代码全写在一个类里的?
- MapReduce运行机制-Map阶段
- javascript --- 使用run函数,让100条ajax依次执行
- python notebook右侧网页_《Python web开发》笔记 一:网页开发基础
- linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解
- 【MySQL】MySQL 数据库表锁和行锁
- 计算机病毒实践汇总三:动态分析基础(分析程序)
- Tomcat里 appBase和docBase的区别
- 论文:Linguistic Structure Guided Context Modeling for Referring Image Segmentation
- 2015秋季腾讯【技术运营】岗位———在线笔试总结
- SD卡、记忆棒等内存卡的数据恢复方法
- 哥大创建了世界上第一个医用毒液数据库
- 【前端领域高频笔试面试】—— HTML+CSS相关
- Java面向对象编程之继承练习题(三)
- 使用exe4j把jar转换成exe文件时,报错java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
- Android 安卓动画 属性动画 - 组合动画
- element el-table 表格行列合并[{class1:‘1101‘,arr1:[1,2,3,5],class2:‘1102‘,arr2:[4,5,6],name:‘h‘}]
- web服务器—nginx
- Apache Kafka API AdminClient Scram账户的创建与删除