关于书中的一个问题,这个是个错误吗,勘误表里没有说道,我也不知道,有点疑惑,希望大家解下惑。
《软件调试》答疑
关于书中的一个问题,这个是个错误吗,勘误表里没有说道,我也不知道,有点疑惑,希望大家解下惑。
51468834@qq.com
2015-04-21, 14:58 下午
软件调试的300页,倒数第二段有下面的一段话
RtlDispatchexception 接到此回复后,首先会进行全局的栈展开..........(中间省略).........然后跳转到异常处理的真实地址,开始执行异常处理。
这句话真的让我糊涂了,这个函数内部不是已经调用了注册的异常处理函数了吗?怎么又跑去执行了。。。。。
然后我看了730页的关于_except_handler3的处理过程,发现这不就是他干的事情吗?包含栈展开的工作,在731页第二段上面也说了——省略了关于全局展开和局部展开的过程。
我是这么理解的。
vc6注册的处理函数一直都是_except_handler3, 在_except_handler3的内部调用了我们自己注册的异常处理函数(根据范围表等等一些逻辑),根据返回值进行不同的处理, 其中当返回的不是”继续搜索“的时候(不打英语了~~)便会有下面的处理:调用_except内部的代码,当返回的是”已经处理“的时候,就跳转到_except的后面继续执行,要是返回了 “继续执行”是不是的进入内核切换一次上下文?不知道,反正eip的值可能被修改了或者没有修改但是总是的修改一下上下文,然后恢复程序的执行。
也就是说在一些情况下,函数不会返回了,直接跑去继续执行了,有些情况下还的返回,比如“继续搜索”
731页不是说下一节会讲栈展开的问题,可是下一节好像不是,难道我没看懂,哈哈哈哈哈哈