百度首页 | 百度空间
 
文章列表
 
2008-01-15 22:21
   万一真的发生了嵌套异常,则CPU照样还是通过上述的路线经RtlDispatchException()进入 RtlpExecuteHandlerForException(),并且有了一个新的异常纪录块。但是实际的调用参数却不同了:首先异常纪录块是新的, 并且此时的RegistrationFrame指向临时的保护节点,而保护节点的处理函数RegistrationFrame->handler则 指向RtlpExceptionProtector()、而不再是_SEHFrameHandler()。在深入到普通节点的处理函数之前,我们不妨先看 一下RtlpExceptionProtector()的代码:

[_KiTrap14()
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 22:21
    先看调用参数。异常纪录块ExceptionRecord就是前面准备好的;指针ExceptionFrame是NULL,这是个 KEXCEPTION_FRAME结构指针,但是从代码中看这只是为PowerPC芯片而设的,用于保存一些附加寄存器的内容,386架构的处理器芯片无 此要求;而陷阱框架指针Tf指向堆栈上因异常而形成的框架,我们在前面倒是称之为“异常框架”。此外,PreviousMode为KernelMode; 而FirstChance为TRUE,表示即将进行的是第一次努力。
    这个函数的代码中有很大一部分是用于用
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 22:20
漫谈兼容内核之二十五:Windows的结构化异常处理(二)
                                           毛德操

    在前一篇漫谈中,读者看到了宏操作SEH_TRY{} SEH_HANDLE{} SEH_END怎样为一个SEH保护域的代码
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 22:17
这几行代码就不需要解释了。但是另一个事却很值得一提,那就是,当从ExceptionList中摘除一个节点时,并不需要释放这个节点所占的空间。因为 这些节点其实都在堆栈上,一旦其所在的框架因从函数调用返回或长程跳转而不复存在,这些数据结构所占的空间也就自然释放了。同样,从一个节点的 SPF_TopTryLevel队列中摘除一个节点、即_SEHPortableTryLevel_t数据结构的时候,也不需要释放。
    最后是_SEH_END:

#define _SEH_END \
   }    
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 22:17
于是,在_SEH_HANDLE中,宏操作_SEH_EXCEPT()的参数就是3,而_SEH_EXCEPT()本身的定义则是:

#define _SEH_EXCEPT(FILTER_) \
      }                                                  
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 22:16
漫谈兼容内核之二十四:Windows的结构化异常处理(一)
                                       毛德操

    结构化异常处理(Structured Exception Handling),简称SEH,是Windows操作系统的一个重要组成部分。
  
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 22:01
开发Linux兼容内核的策略与路线

毛德操

笔者自从提出Linux兼容内核的构想以后,听到了不少反响。其中支持者固然不乏其人,如开源软件推进联盟主席陆首群先生、倪光南院士、还有OSDL的平
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 21:48
Linux兼容内核的三个重要源泉
毛德操

我们要开发、构建的Linux兼容内核并非无源之水,也不需要从零开始“重新发明轮子”。正如牛顿所说要“站在巨人肩膀上”一样,我们
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 21:37

漫谈兼容内核之三:Kernel-win32的文件操作


毛德操



上一篇漫谈中分析/介绍了Kernel-win32的对象管理机制。在各种对象类型中,文件显然是最重要、最复杂(就其操作而言)的类型。如果说像“信号 量”之类的简单对象还有可能独立地加以实现,那么像文件这样的复杂对象这就不太现实,并且实际上也不合适了。所以,本文的目的就是通过几个典型文件操作的 实现介绍kernel-win32是怎样把Windows用于文件操作的系统调
类别:Wine | 评论(0) | 浏览()
 
2008-01-15 21:36
这 个函数的操作可以分成两大部分。第一部分是对_AllocObject()的调用,旨在创建具体的对象。第二部分是将指向所创建对象的指针“安装”在当前 进程的“打开对象表”中,并将相应的下标转换成Handle。为便于阅读讨论,我们先假定第一部分的操作业已完成,_AllocObject()已经返回 所创建的Object结构的指针,先看看对于“打开对象表”的操作,这是从注释行“/* find a handle slot */”开始的。至于putname()、objget ()、objput()一类的函数,那只是递增或递减数据结构中的引用计数(减到0就要
类别:Wine | 评论(0) | 浏览()
 
     
 
 
文章分类
 
     
 
文章存档
 
 
 
 
 
 
 
 
 
 
     
 
最新文章评论
   

已经下载不了了
 
 

毫不含糊地说,反对无效
 
 

想通了,不会有冲突。
 
     


©2008 Baidu