Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

《软件调试》答疑

帖子发起人: 51468834@qq.com   发起时间: 2015-04-21 14:58 下午   回复: 0

Print Search
帖子排序:    
   2015-04-21, 14:58 下午
aaa 离线,最后访问时间: 2015/4/21 6:30:16 51468834@qq.com

无等级
注册: 2015-04-21
发 贴: 1
关于书中的一个问题,这个是个错误吗,勘误表里没有说道,我也不知道,有点疑惑,希望大家解下惑。
Reply Quote
软件调试的300页,倒数第二段有下面的一段话
RtlDispatchexception 接到此回复后,首先会进行全局的栈展开..........(中间省略).........然后跳转到异常处理的真实地址,开始执行异常处理。
这句话真的让我糊涂了,这个函数内部不是已经调用了注册的异常处理函数了吗?怎么又跑去执行了。。。。。
然后我看了730页的关于_except_handler3的处理过程,发现这不就是他干的事情吗?包含栈展开的工作,在731页第二段上面也说了——省略了关于全局展开和局部展开的过程。
我是这么理解的。

vc6注册的处理函数一直都是_except_handler3, 在_except_handler3的内部调用了我们自己注册的异常处理函数(根据范围表等等一些逻辑),根据返回值进行不同的处理,  其中当返回的不是”继续搜索“的时候(不打英语了~~)便会有下面的处理:调用_except内部的代码,当返回的是”已经处理“的时候,就跳转到_except的后面继续执行,要是返回了 “继续执行”是不是的进入内核切换一次上下文?不知道,反正eip的值可能被修改了或者没有修改但是总是的修改一下上下文,然后恢复程序的执行。
也就是说在一些情况下,函数不会返回了,直接跑去继续执行了,有些情况下还的返回,比如“继续搜索”


731页不是说下一节会讲栈展开的问题,可是下一节好像不是,难道我没看懂,哈哈哈哈哈哈

IP 地址: 已记录   报告
高端调试 » 图书 » 《软件调试》答疑 » 关于书中的一个问题,这个是个错误吗,勘误表里没有说道,我也不知道,有点疑惑,希望大家解下惑。

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.