下载与安装
在微软商店中找到Windbg即可。
这里是拼网速的时间,校园网可能有帮助。
在等下载的这段时间里面我也看了一些博客,大概了解了一下windbg的用法。
不过怎么说还是得在虚拟机也下载一个,总是不能在实体机调试的。
在Layout里面修改为Disassembly,这下有点od的样子了。
不过快捷键有点出入,还需要学习一下。
F5:运行
F11:步入
F10:步过
Shift+F11:执行到返回
F9: 下断
设置内可以修改为暗色模式,不过暗色模式总感觉什么配色都不太舒服。
并不重要的碎碎念
除了自带快照和TTD以外,倒没有给我特别大的惊喜,调试内核程序大概是目前最好的,只不过目前我也没有什么需要调试的内核样本,以后再玩吧。
不过接下来。。。
进虚拟机玩玩。
Hello world
在虚拟机的下载有点太久了,还是回到实体机调试一下helloworld试试。
这儿有个坑:直接把exe拖进去的意思是“以dump方式打开”,无法调试
这大概是严谨吧。避免直接执行可执行程序。
不过我不需要这一行为。算了。
注意到下面两种打开方式是不同的。
这一个是不需要加0x的,对我来说是个好消息。
不过ctrl+g的使用是不行的。
感觉不太习惯,得再翻翻博客看看。
快速命令:
g 运行
t 单步步入
p 单步步过
r 查看和修改寄存器
对于习惯gcd调试的人应该不错。
伪寄存器 | 含义 |
---|---|
$ea |
调试目标所执行上一条指令的有效地址 |
$ea2 |
调试目标所执行上一条指令的第二个有效地址 |
$exp |
表达式评估器所评估的上一条表达式 |
$ra |
当前函数的返回地址 |
$eip |
指令指针寄存器 |
$eventip |
当前调试事件发生时的指令指针 |
$previp |
上一事件的指令指针 |
$relip |
与当前事件关联的指令指针 |
$scopeip |
当前上下文的指令指针 |
$exentry |
当前进程的入口地址 |
$retreg |
首要的函数返回值寄存器 |
$retreg64 |
64位格式的首要函数返回寄存器 |
$csp |
栈顶指针ESP |
$p |
上一个内存显示命令所打印的第一个值 |
$proc |
当前进程EPROCESS结构的指针 |
$thread |
当前线程ETHREAD结构的指针 |
$peb |
当前进程的进程环境块(PEB)的地址 |
$teb |
当前线程的线程环境块(TEB)地址 |
$tpid |
拥有当前线程的进程ID(PID) |
$tid |
当前线程的线程ID |
$bpx |
X号断点的地址 |
$frame |
当前栈帧的序号 |
$dbgtime |
当前时间 |
$callret |
使用.call命令调用的上一个函数的返回值 |
$ptrsize |
调试目标所在系统的指针类型宽度 |
$pagesize |
调试目标所在的系统的内存页字节数 |
好像有什么不对,这里竟然没有提醒是个messagebox,难道是symbol缺失吗
鼠标的【回翻页键】和esc键都没办法倒退上一条代码,jmp一跳就没影了。
双击或者enter都没办法进入call的内容,也没有跳转线提示。
有点难受。
重载程序断点被清理了,更难受了。
找一下设置断点保存地的方法。。。
https://cloud.tencent.com/developer/ask/sof/108255784
好的,心死了,什么时候x64dbg可以调试内核程序了跟我说一声(躺)
转头一看,虚拟机里面的微软商店还在更新。
算了,也别更新了,真难用吧。