- 最后登录
- 2010-3-22
- 注册时间
- 2009-6-8
- 精华
- 0
- 积分
- 10
- 阅读权限
- 10
- 帖子
- 8

- 金钱
- 10 元
- 经验
- 11 点
- 威望
- 1 点
- 贡献
- 0 点
- 精华
- 0
|
凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。
本帖最后由 madaxian 于 2010-2-26 20:48 编辑
我不太会打字 但是为了进论坛 。我今天豁出时间了。
这是我所有发帖中第一次发原创文章! 如果大家希望我完善一下这篇文章就直说就行。
---------------------------------------------------------------废话分割线---------------------------------------------------------------------------1.首先 说一下 我认为什么是windows下的调试:
我认为windows的调试就是调试器 能有权处理某个进程的异常。 进程的一些动作(创建 or 结束 --------- 进程 or线程)通知调试器。
2.如何实现:
(1.)调试器是个什么?
他在调试中的作用就是:
1.告诉系统 他要调试哪个进程 。(NtDebugActiveProcess)
2.等着系统告诉他 调试事件。(NtWaitForDebugEvent)
(2.)说“能有权处理某个进程的异常” 是怎么做到的:
当然是IDT 的异常分发函数
KiDispatchException----------->DbgkForwardException------------------->DbgkpSendApiMessage(通知完毕等待返回。。。。。此时进程处于等待中是 暂停的)
其他的呢?
就更简单了 :创建/结束---进程/线程的时候直接DbgkpSendApiMessage
(4.) 两头凑:
好了! 看来 系统和调试器 已经都到尽头了 他们是如何 到一起的呢?
公布最后答案: 进程的 eprocess.debugport。 这是_DEBUG_OBJECT结构。
具体点就是: 调试器(NtWaitForDebugEvent) wait的是DEBUG_OBJECT.EventsPresent
系统(DbgkpSendApiMessage) set的是DEBUG_OBJECT.EventsPresent
调试器具体获取(哪种调试消息)(NtWaitForDebugEvent) 遍历的是LIST_ENTRY EventList;
系统具体设置(哪种调试消息)的是(DbgkpSendApiMessage) 插入的是LIST_ENTRY EventList;
这样就清楚了。
---------------------------------------------------------------废话分割线---------------------------------------------------------------------------
最后说一下:希望以后还能和更多0ginr一起交流! 大家如果希望我完善(结合wrk)一下这篇文章 就直说就行!{:3_57:} |
-
|