首页
社区
课程
招聘
[求助]使用VC的内联汇编问题求助
发表于: 2008-6-2 18:21 7064

[求助]使用VC的内联汇编问题求助

2008-6-2 18:21
7064
我用VC的内联汇编实现"触发异常",为什么在Debug模式下,程序可以正常运行。用release模式就直接退出了,没有触发异常。请高手指点下。
通过OD跟踪Debug模式的exe和release模式下的exe。发现debug模式下,可以正确触发异常,进入异常处理子程序。到release模式下,OD提示“调试程序无法处理的异常”,再shift-f9后就直接退出了。。。
		
	__asm
	{
                                push 	exception_handler; set exception handler
		push	dword ptr fs:[0h]
		mov		dword ptr fs:[0h],esp	
		xor 	eax,eax;reset EAX invoke int3
		int		3
		pop		dword ptr fs:[0h];restore exception handler
		add 	esp,4
.......
exception_handler:
.....
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
把你的编译后的exe的两个版本打包发上来看看?
2008-6-3 11:21
0
雪    币: 108
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
debug文件和release文件是有点区别,对异常的处理也有一些不同,LZ用OLLY看一下异常链上有没有增加相应的异常处理函数入口地址
2008-6-3 11:41
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
4
push   exception_handler
改成
push offset exception_handler
试试看
2008-6-3 13:24
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
__asm
        {
                push   offset exception_handler; set exception handler
                push  dword ptr fs:[0h]
                mov    dword ptr fs:[0h],esp  
                xor   eax,eax;reset EAX invoke int3
                int    3
                pop    dword ptr fs:[0h];restore exception handler
                add   esp,4
                mov esp,ebp
                pop ebp
                retn
        exception_handler:
                mov eax,[esp+0xc]
                inc dword ptr [eax+0xb8]
                xor eax,eax
                ret 16
        }
2008-6-3 17:58
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
非常感谢大家,才看到这么多朋友回复。
今天太晚了,明天试验下,不行的话,我再把exe发上来请教。
2008-6-4 00:39
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
一样的情况

[QUOTE=小虾;462102]__asm
        {
                push   offset exception_handler; set exception handler
                push  dword ptr fs:[0h]
                mov    dword ptr fs:[0h],esp  
                xor   eax,eax;rese...[/QUOTE]
我单独创建了个MFC对话框,按钮事件中完整拷贝上面的代码,没有加其它代码。出现同样的情况。
debug下的exe文件可以触发异常。release的exe文件则不能,直接退出。
高手帮忙指点下。
上传的附件:
2008-6-4 20:34
0
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
vs2003的编译器选项的问题,release把链接器的 /SAFESEH:NO 开启,就可以了.
LoadConfig与seh异常处理是有关系的.
你用LordPE看debug版,没有loadconfig目录,r版就有.
如果是生成的exe,直接把pe文件的loadconfig目录清0,程序运行就又可以正常捕获异常.

参考论坛的文章http://bbs.pediy.com/showthread.php?t=46690&highlight=seh

尿尿完了,继续睡觉..............
上传的附件:
2008-6-5 03:55
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
兄弟,太感谢了。。。。
2008-6-5 08:48
0
雪    币: 7309
活跃值: (3778)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
10
原来你不是用的VC6啊。。。
2008-6-5 09:12
0
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
以后写出壳来了记得便宜卖我一份就行.
2008-6-5 09:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了。。。
2008-6-5 12:44
0
游客
登录 | 注册 方可回帖
返回
//