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

使用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

experiment : 使用WinDbg调试远程用户态程序_第1张图片


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

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的断点上.

experiment : 使用WinDbg调试远程用户态程序_第2张图片


然后进行正常的应用层单步调试.



你可能感兴趣的:(experiment : 使用WinDbg调试远程用户态程序)