阅读:1639回复:11
问个IDT和SEH的问题?IDT(中断描述表) SEH(结构化异常处理) 为什么: int 0 会被SEH直接处理,而没有调用IDT中的异常处理程序,IDT中索引 为0的异常处理程序不就是处理“int 0\"的吗? 而我调用 int 3 会调用IDT中的异常处理程序。 我在win2000和vc6中试的。 |
|
|
沙发#
发布于:2003-09-30 10:05
IDT的异常处理程序会调用运行到你指定SEH部分. IDT入口是饶不走的
|
|
|
板凳#
发布于: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没有截获? |
|
|
地板#
发布于:2003-09-30 16:36
ft了 你不是用idt看了么。对于int3,DPL==3,软自陷自然正常进入其处理程序;对于int0,DPL==0,你的程序无权执行此指令,产生的是保护异常,又怎会到达int0处理程序入口呢。 |
|
地下室#
发布于:2003-09-30 17:51
可是我用“INT 4\"试,SoftIce还是没有在4号中断处理程序截获调用,而是直接跳到我的程序的SEH的”catch\"里了。
另外我用“INT 0\"产生的是保护异常,那么我可以用SoftIce在中断描述表的保护异常处理程序地址处设断点截获”INT 0\"的调用吗? 它在中断描述表的索引号是多少? |
|
|
5楼#
发布于:2003-09-30 19:02
可是我用“INT 4\"试,SoftIce还是没有在4号中断处理程序截获调用,而是直接跳到我的程序的SEH的”catch\"里了。
------------------------------------------------------ 你该换你的softice了。 |
|
6楼#
发布于:2003-10-01 00:36
哎~~` Lu0大哥什么时候也帮我回回帖
|
|
|
7楼#
发布于:2003-10-01 09:20
问一下pjf:
我如果这样写: int a = 5/0; 并向上述那样在除零异常设断点,softice会不会截获呢? |
|
|
8楼#
发布于:2003-10-01 10:42
问一下pjf: 改为 int i = 0; int a = 5/i; 当然会截获。 |
|
9楼#
发布于:2003-10-01 15:40
奇怪,我用
>> bpint 0 成功截获了除零异常,可是用: >> bpm 80466636 rw 却没有成功, 80466636是我用\"IDT\"命令查到的异常处理程序地址. 如下所示: >>IDT 0000 IntG32 0008:80466636 DPL=0 P _Kitrap(0) ..... |
|
|
10楼#
发布于:2003-10-01 15:44
奇怪,我用 bpx 80466636 变成什么了,就此打住,不再re |
|
11楼#
发布于:2003-10-02 15:17
谢谢pjf!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|