在今后会有相当的实验环节,对于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命令大全相关推荐

  1. 寒江独钓Windows内核编程-双机调试1

    今天总结一下关于双机调试,前面一直使用的是DDK包进行NT式与WDM式驱动入门,至今已进入使用WDK包进行编程了,DDK包早已落后我只作为入门因为大体内容变化不大.我使用的书是<寒江独钓Wind ...

  2. 双机调试和windbg的命令

    各位大牛以及和我一样还是菜鸟的朋友们,大家好,今天在调试驱动程序时,由于要做双机调试,所以顺便再论坛发给以后需要的朋友,相对网上其他教程我的这个 算是比较详细了,因为我是看了网上很多相关文章,他们多多 ...

  3. 【双机调试】WinDbg+Win7虚拟机双机调试详细步骤

    一.下载安装配置虚拟机 1.下载安装 VMware Workstation Pro 本文只接受VMware虚拟机,搜索VMware Workstation 下载最新安装包,在本机安装.下载地址:Dow ...

  4. Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)

    简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...

  5. windbg+VM 设置内核调试环境(双机调试)

    虚拟机是XP情况: 启动项添加调试启动,并设置波特率为115200 具体操作可在boot.ini中添加如下代码: multi(0)disk(0)rdisk(0)partition(1)\WINDOWS ...

  6. 【驱动开发】WinDbg 双机调试 Windows XP

    起序:最近学习驱动开发,环境搭建,记录一下. 一.软件环境 宿主机:Windows 10 虚拟机:VMware Workstation 16.1.1 Pro 系统:windows_xp_profess ...

  7. win7 x64 windbg 双机调试

    -------------------------------------------------------------- 转自http://yexin218.iteye.com/blog/5451 ...

  8. win7 x64驱动开发经验(三)windbg 双机调试配置 、问题及解决办法

    win7 x64驱动开发经验(三)windbg 双机调试配置 .问题及解决办法 http://www.cnblogs.com/witty/archive/2012/04/23/2466024.html ...

  9. VirtualKD加速windbg双机调试速度

    原文的标题是:VirtualKD + VMWare实现单机内核调试.我觉得不是很妥当,毕竟双机调试是OS自己实现的,不依赖VirtualKD,所以就改成了这个标题.不过出于对作者的尊重,正文中我还是会 ...

最新文章

  1. spring aop实现log 日志跟踪
  2. 就是你把所有代码全写在一个类里的?
  3. MapReduce运行机制-Map阶段
  4. javascript --- 使用run函数,让100条ajax依次执行
  5. python notebook右侧网页_《Python web开发》笔记 一:网页开发基础
  6. linux c多进程多线程,linux下的C\C++多进程多线程编程实例详解
  7. 【MySQL】MySQL 数据库表锁和行锁
  8. 计算机病毒实践汇总三:动态分析基础(分析程序)
  9. Tomcat里 appBase和docBase的区别
  10. 论文:Linguistic Structure Guided Context Modeling for Referring Image Segmentation
  11. 2015秋季腾讯【技术运营】岗位———在线笔试总结
  12. SD卡、记忆棒等内存卡的数据恢复方法
  13. 哥大创建了世界上第一个医用毒液数据库
  14. 【前端领域高频笔试面试】—— HTML+CSS相关
  15. Java面向对象编程之继承练习题(三)
  16. 使用exe4j把jar转换成exe文件时,报错java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
  17. Android 安卓动画 属性动画 - 组合动画
  18. element el-table 表格行列合并[{class1:‘1101‘,arr1:[1,2,3,5],class2:‘1102‘,arr2:[4,5,6],name:‘h‘}]
  19. web服务器—nginx
  20. Apache Kafka API AdminClient Scram账户的创建与删除

热门文章

  1. photoshop(ps) cs4中文版
  2. 2021-08-04 CSS3
  3. C4D视图背景无法调节透明度,C4D背景图无法调整透明度
  4. 1、spring之Ioc 原理应用
  5. Mybatis四大核心对象及四大内置对象
  6. html里面column的超链接,column函数是什么意思
  7. 听听中医怎么谈特发性震颤?
  8. 我想要的智能电视一键播放体验
  9. SAST 技术产品 CodeSense 通过信通院工具能力测试
  10. 关于h5页面苹果手机使用fixed定位tabbar最底部时遮挡内容问题