Chinaunix首页 | 论坛 | 博客
  • 博客访问: 430024
  • 博文数量: 72
  • 博客积分: 1583
  • 博客等级: 上尉
  • 技术积分: 775
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-23 09:36
文章分类

全部博文(72)

文章存档

2011年(72)

我的朋友

分类: WINDOWS

2011-03-04 12:22:56

1.基本调试控制

运行程序(Run): 快捷键:F5 命令:g

单步步入(Step In) 快捷键:F8 命令:p

单步步过(Step Over): 快捷键:F10

运行到光标所在行: 快捷键:F7

执行到返回:gu

执行到指定地址:g [Address]

重新运行调试程序: 快捷键:Ctrl+Shift+F5(这个对驱动一般用不到)

 

2.断点

断点之于调试当然是非常重要的

常用命令:

bp [Address]or[Symbol] 在指定地址下断

可以使用地址或符号,如

    bp 80561259(Windbg默认使用16进制)

    bp MyDriver!GetKernelPath

    bp MyDriver!GetKernelPath+0x12

bp [Address] /p eprocess 仅当当前进程为eprocess时才中断

这个很常用,比如你bp nt!NtTerminateProcess,但是只想在某一进程触发此断点时才断下来,那就加上这个参数吧,因为内核中的代码是各个进程共用的,所以此命令很实用

bp [Address] /t ethread 仅当当前线程为ethread时才中断,用法跟/p参数类似

bu [Address]or[Symbol] 下一个未解析的断点(就是说这个断点需要延迟解析)

这个也很常用,比如我们的驱动名为MyDriver.sys,那么在驱动加载之前下断bu MyDriver!DriverEntry

然后加载这个驱动时就可以断在驱动入口,并且这个是不需要调试符号支持的

bl 列出所有断点,L=List

bc[id] 清除断点,c=Clear,idbl查看时的断点编号

bd[id] 禁用断点,d=Disable,id即断点编号

be[id] 启用断点,e=Enable,id为断点编号

 

3.查看和修改数据

调试中不可避免的要查看和修改数据

查看内存:

db/dw/dd/dq [Address]       字节//双字/四字方式查看数据

da/du [Address]           ASCII字符串/Unicode字符串方式查看指定地址

其它常用的如查看结构

dt nt!_EPROCESS

dt nt!_EPROCESS 89330da0 (0x89330da0作为对象指针)

修改内存:

eb/ew/ed/eq/ef/ep Address [Values]

字节//双字/四字/浮点数/指针/

ea/eu/eza/ezu Address [Values]

ASCII字符串/Unicode字符串/NULL结尾的ASCII字符串/NULL结尾的Unicode字符串

搜索内存:

s -[b/w/d/q/a/u] Range Target

搜索字节//双字/四字/ASCII字符串/Unicode字符串

 

4.寄存器

在用Windbg调试时可以Alt+4直接调出寄存器窗口,然后拖放到合适的位置就可以。

要修改呢就直接双击相应的项就可以了。

把命令的方式也说一下,比较简单:

r 显示所有寄存器的值

r eax 显示eax的值

r eax=1 修改eax的值为1

 

5.辅助命令

!process 显示当前进程信息

!process 0 0 显示当前所有进程(会有僵尸进程)

!process 1f4 显示pid1f4的进程信息,后面也可以跟eprocess的值

!thread 显示当前线程信息

!thread

!process 1f4 显示tid768的线程信息,后面也可以跟ethread的值

栈相关:

k 显示调用栈

kb 显示ebp和前3个参数

kp 以函数调用形式显示栈

阅读(1291) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~