首页
社区
课程
招聘
SEH的一个问题~~~~~~~~~~~~~~~~~~~~~~~~~~~
发表于: 2005-6-4 11:24 4391

SEH的一个问题~~~~~~~~~~~~~~~~~~~~~~~~~~~

lee 活跃值
3
2005-6-4 11:24
4391
当我们在VC++使用__try{} __except{}或者__finally{}的时候,如果产生异常
会自己到__except{}或者{}__finally{}中去运行!!!

为什么我在跟踪SEH的时候,以线程异常处理为例:
push offset SehHandler
push fs:[0]
mov  fs:[0],esp

要自己到SehHandler出下断点,然后G到那里。。。。

而不是上面的自己进入异常代码去运行,如果我们不G到SehHandler出了,那到
那里去运行了啊。。。

SEH的原理我已经基本清楚,但是我还不明白怎么来反跟踪!!

谁给例子啊。。。。。。。。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
push offset SehHandler  ;这一句保存着SehHandler地址,当程序产生异常时,程序的线程将会中断并跳到这个SehHandler地址处继续运行并处理这个异常或修复这个异常,所以若程序产生异常时,我们可以找到这个地址并在这个地址设断就可以继续跟踪程序了,否则程序就会在我们眼皮底下跑了(这就是用SEH反跟踪的一例,至于用SEH如何来进行反跟踪这就看你了,如在SEH可以将Drx寄存器清0破坏调试环境等操作)。
push fs:[0]
mov  fs:[0],esp
2005-6-4 11:55
0
雪    币: 255
活跃值: (175)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
最初由 小虾 发布
push offset SehHandler ;这一句保存着SehHandler地址,当程序产生异常时,程序的线程将会中断并跳到这个SehHandler地址处继续运行并处理这个异常或修复这个异常,所以若程序产生异常时,
我们可以找到这个地址并在这个地址设断就可以继续跟踪程序了,否则程序就会在我们眼皮底下跑了(这就是用SEH反跟踪的一例,至于用SEH如何来进行反跟踪这就看你了,如在SEH可以将Drx寄存器清0破坏调试环境等操作)。
push fs:[0]
mov fs:[0],esp


非常感谢!!!我自己在想想!!!
2005-6-4 12:32
0
雪    币: 255
活跃值: (175)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
我还想知道一个问题,我想这个问题我自己实际跟一次就解决了,但是我还是想确认一下。 。。

比如:
     mov eax,30h
     xor ebx,ebx
     div ebx    //这里会产生异常
     mov edx,30h
     mov ecx,18h

如果我不按照前面的说的。。G到SehHandler处。。。如果我按F8的话,会不会执行mov edx,30h或者是跳到内核代码去执行!!!
2005-6-4 12:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
应该是出现调试器无法处理该异常,然后程序就会自动退出。不过我没在其他平台上试过,不太敢肯定这个,你自己写个SEH程序自己调试一下就清楚。。
2005-6-4 12:59
0
雪    币: 255
活跃值: (175)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
谢谢!!!
2005-6-4 14:22
0
游客
登录 | 注册 方可回帖
返回