注册 |登录

0GiNr技术社区论坛系统底层开发 › 查看主题

983

查看

3

回复
返回列表

Rank: 1

金钱
10 元 
经验
11 点 
威望
1 点 
贡献
0 点 
精华
go

原创:windows的内核调试函数完全解读(浓缩)初次原创大家指教.

1
发表于 2010-2-26 20:42 | 只看该作者 | 倒序看帖 | 打印
凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。
本帖最后由 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:}

TOP

Rank: 1

金钱
10 元 
经验
11 点 
威望
1 点 
贡献
0 点 
精华
2
发表于 2010-2-27 20:28 | 只看该作者
本帖最后由 madaxian 于 2010-2-27 20:30 编辑

谢谢大牛 我终于可以进论坛进修了!

不过看来没人感兴趣 、我还是研究DPC apc吧。

TOP

Rank: 1

金钱
54 元 
经验
112 点 
威望
4 点 
贡献
0 点 
精华
3
发表于 2010-2-28 17:53 | 只看该作者
我挺感兴趣的..也在研究这些..

期待楼主能再深入一下..

比如说windbg的内核调试协议.

TOP

Rank: 1

金钱
10 元 
经验
11 点 
威望
1 点 
贡献
0 点 
精华
4
发表于 2010-3-3 20:43 | 只看该作者
我挺感兴趣的..也在研究这些..

期待楼主能再深入一下..

比如说windbg的内核调试协议. ...
冷如烟 发表于 2010-2-28 17:53



    windbg我是没啥兴趣的。因为他潜力太小了。不过和ring3的差不多是:

KiDispatchException----------------->KiDebugRoutine

然后通过串口操作等函数(这方面我真是懒得看)传给另一台电脑。让另一个电脑来参与控制异常处理。

TOP

0GiNr安全门户 |联系我们

GMT+8, 2010-9-11 06:40.

Powered by Discuz! X1

© 2001-2010 Comsenz Inc.