首页
社区
课程
招聘
[求助][讨论] 对异常处理 _try 的疑惑!
发表于: 2009-4-14 17:09 4442

[求助][讨论] 对异常处理 _try 的疑惑!

2009-4-14 17:09
4442
其实就是VC中的线程SEH了。

__try{

  _asm{
             mov  ebp,0           //破坏ebp
             mov  esp,0           //
             mov   [0],al           //异常来了
           }
         }

__finally{
               MessageBox(0,0,"进程竟然没崩溃??",0)
              }

VC的SEH异常处理是怎么还原ebp等关键寄存器的?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
你这个程序应该不能正常执行吧,ebp的值修改了还有办法可以还能还原(在esp堆栈中还保存有原ebp的值),esp的值都给你改了你的这个程序应该是无法正常执行的了,因为SEH都被你破坏了。
2009-4-14 17:23
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
关键是大多数函数都会修改ebp啊?
函数都是
push ebp
move ebp,esp 开头的吧!!

要是调用某个函数出了异常,那ebp不是还不了原了?

但事实上是可以的
2009-4-14 21:25
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
恰恰相反,esp是可以不平衡的,而ebp才是关键!因为局部变量都是 [ebp-?]

SEH异常处理中又是怎么还原ebp的呢?

_try是在编译时就已经固定好了,安全返回的eip是可以确定的,但ebp却是随线程而变化的。

极度疑惑中。。。。。。
2009-4-14 21:35
0
雪    币: 182
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
SEH链都被你搞掉了,还怎么进SEH异常处理?
估计是异常被你调试器处理掉了。
2009-4-14 22:33
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=AASSMM;606795]恰恰相反,esp是可以不平衡的,而ebp才是关键!因为局部变量都是 [ebp-?]

SEH异常处理中又是怎么还原ebp的呢?

_try是在编译时就已经固定好了,安全返回的eip是可以确定的,但ebp却是随线程而变化的。

极度疑惑中。。。。。。[/QUOTE]

你本来就想看看编译器是怎么做的,却光看自己的源码?你应该反汇编一下生成的程序,看看这个try-finally编译器是怎么编译成机器码的。
2009-4-14 23:56
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我是用ASM的。。。。。。。。。
会看C,不会编译C,特别是VC,配置不来。。。。。。

麻烦你编译个小程序,我OD看看
2009-4-15 17:15
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大家没理解我的意思啊。

我这样问吧,线程SEH是否适用于多线程?

我在一个公共函数中设置线程SEH,该函数能否被多个线程同时调用?出现异常时能否全部正常处理??
2009-4-16 11:36
0
游客
登录 | 注册 方可回帖
返回
//