textbox

IT博客 联系 聚合 管理
  103 Posts :: 7 Stories :: 22 Comments :: 0 Trackbacks
用户模式的调试原理和过程.
主要对象:
    1.调试进程 (用户界面的输入\输出与被调试进程的桥梁)
    2.被调试进程

调试器一般会用两个线程(也有用单线程的)来完成调试与用户界面的交互.UI线程与调试线程(DWT Debuger's Work Thread)
这样的原因是界面不会因为调试的等待而停止输入输出.

  DWT的主要内容是
    1.建立会话.调用CreateProcess或DebugActiveProcess
    2.循环调用WaitForDebugEvent,ContinueDebugEvent 来接收被调试进程的调试的event
  类似window的消息循环.
 
  DWT的TEP与普通TEP的不同地方在于DbgSsReserved 数组主要用于保存(DebugObject)在xp中数组的每一个元素都是指向DBGSS_THREAD_DATA结构 该结构主要用于保存被调试的进程/句柄调用WaitForDebugEvent,ContinueDebugEvent,dbgUIGetThreadDebugObject,dbgUISetThreadDebugObject 会维护这个数组

  被调试进程与普通进程的差别.
  EPB的DebugPort  不为空
  PEB的BeginDebugged 不为0




  CreateProcess
  CreateProcessInternalW
  ZwCeateProcessEx
   -DbgConnectToDbg
    -NtConnectPort
     设置DbgSsReserved[0]/DbgSsReserved[1] 调试端口句柄/Semaphore信号对象 很多API调试通讯都是通过该调试端口来传递.
   -NtCreateProcess
    -PspCreateProcess
     设置EPROCESS和DebugPort=1
  把普通的进程晋升为调试子系统"眼里"的被调试进程.

  
posted on 2010-11-03 22:07 零度 阅读(676) 评论(0)  编辑 收藏 引用 所属分类: 调试/壳概念
只有注册用户登录后才能发表评论。