您的位置:首页 > 其它

experiment : 使用WinDbg调试远程用户态程序

2013-06-04 16:13 274 查看
使用WinDbg调试远程用户态程序的步骤:

假设这个用户态程序是我们自己的, 有源码~

* 在程序入口处加入等待调试的代码.

* 将用户态目标程序编译成Release版带调试符号, 假设这个PE文件叫 25912.exe

* 用WinDbg链接远程计算机, http://msdn.microsoft.com/en-us/library/windows/hardware/hh451173%28v=vs.85%29.aspx

当第一次被断在系统断点时, 设置好WinDbg的符号路径, PE映像路径, PE源文件路径.

打开25912.c, 在等待调试的代码下面下断点.

输入 g 命令, 全速运行WinDbg

* 将映像文件(25912.exe)拷贝到远程计算机.

运行此用户态程序, 程序运行后, 停在等待调试的代码处.



* 将WinDbg暂停,

用 !process 0 0 列出所有进程, 找到 25912.exe.

PROCESS 857313b0  SessionId: 1  Cid: 0b3c    Peb: 7ffd4000  ParentCid: 0750
    DirBase: 3efb9540  ObjectTable: 91756858  HandleCount:  21.
    Image: 25912.exe


确认该进程信息

kd> !process 857313b0 0
PROCESS 857313b0 SessionId: 1 Cid: 0b3c Peb: 7ffd4000 ParentCid: 0750 DirBase: 3efb9540 ObjectTable: 91756858 HandleCount: 21. Image: 25912.exe


切换到该进程

kd> .process /p 857313b0
Implicit process is now 857313b0
.cache forcedecodeuser done


重新加载用户态程序符号文件

kd> .reload /f /user
Loading User Symbols
..............


这时, 可以看到25912.c 中的断点已经变红. 断点生效了~

用 bl 命令将断点列出时, 断点类型 已经变成了 E



非入侵式切换到用户态程序

kd> .process /i /p 857313b0
You need to continue execution (press 'g' <enter>) for the context
to be switched. When the debugger breaks in again, you will be in
the new process context.


用 g 命令, 全速运行WinDbg, 等停下来时. 如果没有落在断点上, 继续 g 命令

因为下了等待调试的代码, 需要在用户态程序中执行等待调试结束的动作(回车), 然后就落在了WinDbg的断点上.



然后进行正常的应用层单步调试.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: