阅读:6784回复:7
怎么在内核调试模式调应用程序(驱动程序,应用程序一锅汇了)
http://advdbg.org/blogs/advdbg_system/articles/1492.aspx
先看一下上面的张银奎大侠的文章,然后我们再分析一下怎么做。 看了上面的文章,也许你已经成功了,那就没必要看下面的文字 ,如果你还没有明白,我们就实操一下: 环境: 双机内核模式调试状态,即通过windbg连接另一台机器调试驱动,不管对方是真机还是虚拟机。此时,我们可以调试驱动程序(我假设你已经会调驱动,并且环境准备好了,想调的应用程序的pdb文件也准备好了). 通常,我们可能会在目标机(被调试的机器上)再运行一个windbg或者用vc的远程调式工具进行调试。但是我现在的所有工程,包括测试程序都是用winddk编译的,改用vc调试比较麻烦,现在就是想在调驱动的同时继续调试我的测试程序,这样方便又直接。 现在处于kd> 状态 ,可以直接设置驱动程序的断点,但是你要是设置应用程序的断点,会收到错误消息,说找不到这个模块。好,我们就来记它能找到: !process 0 0 会出列进程相关信息,如 PROCESS 820a36d0 SessionId: 0 Cid: 07cc Peb: 7ffd9000 ParentCid: 01d4 DirBase: 09b00220 ObjectTable: e18ecc48 HandleCount: 104. Image: alg.exe PROCESS 820d2020 SessionId: 0 Cid: 0118 Peb: 7ffdf000 ParentCid: 00c4 DirBase: 09b00260 ObjectTable: e19252b0 HandleCount: 470. Image: explorer.exe PROCESS 82232b58 SessionId: 0 Cid: 016c Peb: 7ffdf000 ParentCid: 0118 DirBase: 09b002c0 ObjectTable: e188c9d8 HandleCount: 76. Image: epsng_certd.exe PROCESS 82170020 SessionId: 0 Cid: 00d8 Peb: 7ffde000 ParentCid: 0118 DirBase: 09b002a0 ObjectTable: e1916e98 HandleCount: 36. Image: VMwareTray.exe PROCESS 821353d8 SessionId: 0 Cid: 0170 Peb: 7ffdc000 ParentCid: 0118 DirBase: 09b002e0 ObjectTable: e1c8e138 HandleCount: 128. Image: VMwareUser.exe 找到你关心的进程 ,如 explorer.exe ,它的进程 PROCESS 值,其实就是EPROCESS, 为 820d2020 |
|
|
沙发#
发布于:2009-01-18 21:14
然后,你要切换进程上下文
.Process 820d2020 注意:这里的Process 前面有一个点,不要看成你的显示器上的灰尘 这样,就处于这个进程上下文了。 .reload /user 加载用户模式符号文件 (保证你的符号文件处于正确的目录中) 然后就可以直接 下断点了,比如 bp explorer!xxxxfunc 其它的没啥区别了 |
|
|
板凳#
发布于:2009-01-20 15:53
Microsoft怎么就不能提供一个addr呢?
|
|
地板#
发布于:2009-01-21 09:08
找到你关心的进程 ,如 explorer.exe ,它的进程ID为 820d2020
应该是EPROCESS,不然菜鸟会晕的. |
|
|
地下室#
发布于:2009-02-04 16:16
wowo说的对,是EPROCESS 不是进程ID, 老鸟们一看值就知道我的笔误,小鸟们....抱歉了,但是确可以实操.haha
每个值前面其实都有值的名称,那天太兴奋了,就随口这么一说,抱歉各位... |
|
|
5楼#
发布于:2009-04-07 20:31
很有用!谢谢
|
|
|
6楼#
发布于:2010-07-17 19:57
矛塞顿开..
|
|
7楼#
发布于:2010-09-09 23:45
|
|