geobean
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1639回复:11

问个IDT和SEH的问题?

楼主#
更多 发布于:2003-09-30 09:10

IDT(中断描述表) SEH(结构化异常处理)
为什么:
 int 0
会被SEH直接处理,而没有调用IDT中的异常处理程序,IDT中索引
为0的异常处理程序不就是处理“int 0\"的吗?
而我调用
 int 3
会调用IDT中的异常处理程序。
我在win2000和vc6中试的。  
I love this game!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-30 10:05
IDT的异常处理程序会调用运行到你指定SEH部分. IDT入口是饶不走的
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
geobean
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-30 13:58
可是我用SOftice:
>>IDT
Int Type Sel:Offset Attributes Symbol/Owner
IDTbase=C000ABBC Limit=02FF
0000 IntG32 0028:C0001200 DPL=0 P VMM(01)+0200
.......

得到异常处理的handler:C0001200,然后:
>>bpm C0001200

调用 INT 0,为什么SOftice没有截获?

I love this game!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-09-30 16:36

IDT(中断描述表) SEH(结构化异常处理)
为什么:
 int 0
会被SEH直接处理,而没有调用IDT中的异常处理程序,IDT中索引
为0的异常处理程序不就是处理“int 0\"的吗?
而我调用
 int 3
会调用IDT中的异常处理程序。
我在win2000和vc6中试的。    


ft了
你不是用idt看了么。对于int3,DPL==3,软自陷自然正常进入其处理程序;对于int0,DPL==0,你的程序无权执行此指令,产生的是保护异常,又怎会到达int0处理程序入口呢。
geobean
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-09-30 17:51
可是我用“INT 4\"试,SoftIce还是没有在4号中断处理程序截获调用,而是直接跳到我的程序的SEH的”catch\"里了。

另外我用“INT 0\"产生的是保护异常,那么我可以用SoftIce在中断描述表的保护异常处理程序地址处设断点截获”INT 0\"的调用吗?
它在中断描述表的索引号是多少?
I love this game!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-09-30 19:02
可是我用“INT 4\"试,SoftIce还是没有在4号中断处理程序截获调用,而是直接跳到我的程序的SEH的”catch\"里了。
------------------------------------------------------
你该换你的softice了。
yangmin26
驱动小牛
驱动小牛
  • 注册日期2003-02-22
  • 最后登录2012-11-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-10-01 00:36
哎~~`  Lu0大哥什么时候也帮我回回帖
YM KILL YOU
geobean
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-10-01 09:20
问一下pjf:

我如果这样写:

       int a = 5/0;

并向上述那样在除零异常设断点,softice会不会截获呢?
I love this game!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-10-01 10:42
问一下pjf:

我如果这样写:

       int a = 5/0;

并向上述那样在除零异常设断点,softice会不会截获呢?


改为
int i = 0;
int a = 5/i;

当然会截获。
geobean
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-10-01 15:40
奇怪,我用
>> bpint 0
成功截获了除零异常,可是用:
>> bpm 80466636 rw
却没有成功,
80466636是我用\"IDT\"命令查到的异常处理程序地址.

如下所示:
>>IDT
0000 IntG32 0008:80466636 DPL=0 P _Kitrap(0)
.....
I love this game!
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-10-01 15:44
奇怪,我用
>> bpint 0
成功截获了除零异常,可是用:
>> bpm 80466636 rw
却没有成功,
80466636是我用\"IDT\"命令查到的异常处理程序地址.

如下所示:
>>IDT
0000 IntG32 0008:80466636 DPL=0 P _Kitrap(0)
.....


bpx 80466636

变成什么了,就此打住,不再re
geobean
驱动牛犊
驱动牛犊
  • 注册日期2001-10-30
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-10-02 15:17
谢谢pjf!!!!!!!!!!!!!!!!!!!!!!!!!!!
I love this game!
游客

返回顶部