windbg 真的很容易忘记 windbg

dd nt!KeServiceDescriptorTable

!drvobj 驱动名称 : The !drvobj extension displays detailed information about a DRIVER_OBJECT.

u 反汇编

uf反汇编函数

p 单步

bp(bu,bm) 断点

g

.cls

.reload

u eip

u eip l20

e 修改内存

r 修改寄存器

!process 0 0 calc.exe

!process 0 0 system

!process pid

.formats 000ab048

!dd

!pte

!ptov

!vtop

!pfn

~s

dg

!pcr

dv 显示变量值

源代码操作指令

.open,lsf,lsc,ls,l,lsp

Ctrl+O打开并查看源文件

windbg源代码不能跟踪当前指令行时,reload image path。

Call Stack相关命令:

k,kM

.frame frame_number

Windbg查看全局变量:

a.直接把鼠标移动到全局变量上,就能显示值了.

b.watch窗口里面,把那个全局变量输进去.

入侵模式调试

在默认情况下,当我们用CDB调试一个已经运行的进程时,它通常作为全功能的调试器附上进程(使用Win32DebuggingAPI)。在这种模式下,可以设置断点,单步调试代码,得到各种调试事件的通知(例如,异常,加载/卸载模块,启动/退出线程,等等)。VisualStudio也可以做到这些,并提供更友好的用户界面。另外,每个进程每次只能被一个调试器附上。这是否意味着如果我们用VisualStudio调试器调试应用程序,就不能再用CDB得到它的附加信息了?不,不完全是这样,因为除了全功能调试模式外,CDB还支持入侵调试模式。

CDB以入侵模式附上目标进程时,并没有使用Win32DebuggingAPI,而是先暂停目标进程的所有线程,执行用户指定的命令。在所有的命令执行之后,CDB退出之前,恢复暂停的线程。因此,目标进程可以继续运行,好像什么事也没发生一样。即使像VisualStudio之类的全功能调试器正在调试目标进程,CDB仍可以用入侵模式附上它,并获得所需要的信息。在CDB完成任务并分离附上的进程后,我们可以继续用VisualStudio调试器调试这个应用程序。

lmf 列出当前进程中加载的所有dll文件和对应的路径

bp `test.c:888` 在指定源程序行号下断. 行号有木有啊?状态栏。

显示进程| 切换进程|1s

sx, sxd, sxe, sxi, sxn, sxr, sx- (Set Exceptions)

The sx* commands control the action that the debugger takes when an exception occurs in the application that is being debugged, or when certain events occur.

--引http://www.vcfans.com/2010/04/windbg-study-notes-order.html

WinDbg学习笔记整理

去年看WinDbg帮助时随手记下来的一点资料,放上来保存一下,有新内容我会陆续更新上来。

1. 命令行前数字的含义

用户调试模式下,如2:005, 2表示进程ID,005表示线程ID

内核调试模式下,将显示kd>, 如果是多核处理器将显示0: kd> 0:表示当前运行在哪核处理器上。

2. 命令输入时,支持UP,DOWN,TAB键联想,可以使用TAB键进行通配符的联想。

3. Enter键,在命令行没有命令输入时,执行上一条命令。

4. Ctrl+C 终止一段长时间执行的命令

5. .cls 清除命令行的显示结果。

6. WinDbg启动时增加-Q参数,在WinDbg退出后将不提示保存当前的工作环境的对话框。如果使用-QY将在退出WinDbg后,自动保存当前的配置环境。

7. 调试命令之执行命令

Ctrl+C 停止

.restart 重新启动程序 快捷键Ctrl+Shift+F5

g 执行程序 快捷键F5

gc 恢复执行,当被条件断点中断后。

gh 等同于g命令,但当有异常时需要对异常进行处理

gn 直接运行等同于g命令,但忽略异常

gu 执行到当前函数结束, 快捷键shift+F11

p 逐条运行,遇到Call直接步过, 快捷键 F10

pa 执行到指定地址

pc 执行到下一个Call的入口

pct 执行到下一个Call的入口或执行到当前函数的反回处。

ph 执行到下一个跳转处

pt 执行到返回

t 单步执行

ta 单步执行到指定地址

tb 单步执行到分支处

tc 单步执行到下一个Call的开始,如果当前指令就是一个Call,执行完此Call,再停在下一个Call的开始处。

tct 单步执行到下一个Call的开始或返回处。

8.调试命令之断点

bl 列取已下的断点,以及其状态

.bpcmds 简单列表显示断点

bp/bu/bm 设置一个断点

bp: 可以对地址(bp 0×1234567)以及符号(bp thApp!somefunction)下断点,对于使用对符号下断点,如果符号了修改,断点依然存在,但不一定有效,另外bp并不会保存到workspace中。

bu: 可以对某一符号下断点(bu theApp!somefunction),如果该地址的代码修改后,断点作相应的更新修改。bu下的断点将会保存到Workspace中,下次启动时会自动载入。

bm: 可以对某一符号下断点,但支持通配符,如bm theApp!funcDel*

ba 在指定地址设定访问方式断点,w(写方式),e(执行方式),r(只读方式),ba w4 0×123455 其中的4表示的字节宽度。ba下的地址断点一定要下到指令的开始处,否则不会执行。

bc 清除指定断点,可以单独指定断点编号,可以是一个编号范围

bd/be 关闭断点/打开断点

br 重新指定断点编号。br OldID NewID

9.调试命令之内存读写

d* 读取内存数据

da 显示Ascii码

db 显示字节和ascii码

dc 显示双字(4个字节)和Ascii码

dd 显示双字

dD 显示双精度浮点数

df 显示单精度浮点数

du 显示unicode

dw 显示一个字

e* 向内存写入数据,e后面的字符意思参考d*

dt 显示指定变量的数据,比如结构体之类的

ds/dS 显示字符串,前者显示ascii,后者显示unicode的字符串。

dl 显示一个链表数据

!address 显示目前进程的内存或计算机的内存使用情况

s 搜索内存

dv 显示局部变量

!for_each_local dt @#Local 枚举当前栈空间所有局部变量值,注意@#Local的大小写。

!db/!dc/!dd/!dp/!du/!dw 读取物理内存

?GlobalVar 查看全局变量地址,通过?获得地址后,通过dd查看相应的值

$!LocalVar 查看局部变量地址,通过$!获得地址后,通过dd查看相应的值

10. 调试命令之记存寄器

r 设置和修改寄存器

11. k命令显示调用栈

kb 显示被调用函数的前三个参数

kp 如果有私有pdb的话,将显示函数原型的格式显示出来。

12. u/uf 显示反汇编

13. q 结束调试

14. lm 显示所加载的模块,lml列出所有已加载符号的模块。lmvm列出所加载模块的详细信息

15. vertarget 显示当前加载进程实例的一些信息,

16. !peb (process environment block )显示当前进程的运行环境

17. .reload重新加载模块的符号。在加载前可以先打开symbol的noisy模式(命令: !sym noisy),显示加载详细信息

18. !runaway显示当前进程中线程运行情况

19. dds用来显示当前内存的数据和相对应该的符号

20. ~<线程号>s 用来切换当前线程,如~0s将线程切换到ID为0的线程中。

21. .frame切换到当前函数栈中,num为栈的编号,可以通过knL列出当前所有栈调用以及其编号。然后通过x列出所有局部变量地址。

22. wt (watch and trace data) 跟踪一个函数调用子函数的数量,可以通过-l设定Trace的层数

23. ln 用来显示指定地址附近的符号

24. !sym 列出当前模块的符号目录

!sym noisy打符号处理的提示开关,比如显示载入失败等信息,与之相反的为!sym quiet

!sympath <符号目录> 来添加符号目录,然后使用.reload/.restart重新载入模块

25. sx列出系统异常设置状态

26. l+t:进入源代码级的单步执行模式, l-t:进入汇编级的单步执行模式

  

爱华网本文地址 » http://www.aihuau.com/a/25101012/119736.html

更多阅读

真的很累么?累就对了。 男友一晚上一次就很累

马云有这么一段话我很欣赏:马云说:真的很累吗?累就对了,舒服是留给死人的!苦,才是人生,累才是工作,变,才是命运,忍,才是历练,容,才是智慧,静才是修养,舍才是得到,做才是拥有。如果感到此时的自

那一刻,我真的很棒 那一刻我真后悔

那一刻,我真的很棒天师附小六一班周蜜我,一个平凡的女孩,一个普通的小学生。喜欢思考,喜欢阅读,喜欢沉浸在大自然的清新中,更喜欢在自己的实践经历中获取意味深长的人生哲理。在我细细‘品味’过的哲理中,有一句使我终身受益的话,那就是:“

RE:宝莲灯小玉,真的不容易

又看了一遍宝莲灯,不禁又一次泪流满面,脑海中一遍又一遍地出现小玉与沉香的种种,我只想说,小玉,真的不容易.当小玉在姥姥的要求下迫不得已偷走灯心而离开后,二郎神来追杀时,她明知道自己敌不过二郎神,却是拼上了性命.小玉,当你敌不

想说爱你并不是件很容易的事 歌曲想说爱你不容易

想说爱你并不是件很容易的事连云港市岗埠中学董继妹有人说初二是分水岭,两极分化尤为明显,有人说初二学生最令老师们头疼,批评不得,表扬也不行,做起事来让人恨得牙根痒痒。是的,初二的学生真的与其他阶段的学生大不相同,他们的心思最费思

声明:《windbg 真的很容易忘记 windbg》为网友小浪漫分享!如侵犯到您的合法权益请联系我们删除