首页
社区
课程
招聘
[求助]SEH异常处理后程序还是崩了
发表于: 2013-4-15 12:08 3387

[求助]SEH异常处理后程序还是崩了

2013-4-15 12:08
3387
SEH异常处理后程序还是还是会弹出系统的异常对话框,这是怎么个情况呢?

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <winnt.h>

typedef struct _EXCEPTION_REGISTRATION{
    _EXCEPTION_REGISTRATION* ptrb;					                //指向前一个EXCEPTION_REGISTRATION的指针
    PVOID    handler;                                               //当前异常处理回调函数
}EXCEPTION_REGISTRATION,*PEXCEPTION_REGISTRATION;


int SEHTip(PEXCEPTION_RECORD lpExceptionRecord,
			 PEXCEPTION_REGISTRATION lpSEH,
			 PCONTEXT lpContext,
			 LPVOID lpDispatcherContext)
{
	printf("%s,\t异常地址:%08x,\t异常代码:%08x\n","异常触发了",lpExceptionRecord->ExceptionAddress,
		lpExceptionRecord->ExceptionCode);

	lpContext->Eip = (DWORD)lpExceptionRecord->ExceptionAddress + 0x2;			//跳到异常代码+2的位置继续执行
	lpContext->Dr0 = 0;															//清调试寄存器
	lpContext->Dr1 = 0;
	lpContext->Dr2 = 0;
	lpContext->Dr3 = 0;
	lpContext->Dr7 = 0;
	return ExceptionContinueExecution;
}


int main(int argc, char* argv[])
{
	_asm{

		push	fs:[0]
		lea		eax,dword ptr [esp-8]
		xchg	eax,dword ptr fs:[0]
		mov		ebx,offset SEHTip
		push	ebx							//压入异常处理程序
		push	eax							//异常链

		mov		esi,0
		mov		eax,dword ptr [esi]			//触发异常

	}
	_asm{
		add		esp,8						//恢复堆栈
		pop		fs:[0]
	}
	printf("异常处理完毕\n");

	return 0;
}

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 608
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
WIN7 64或者WIN7下运行的程序吧。貌似权限不够。
2013-4-15 22:03
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主的代码还是有些问题的,看得出来对seh的结构不太清楚,对汇编也不太熟,这种情况下我建议直接用__try/__except/__finally这一套封装好了的宏,不然你用高级语言是为啥呢?
自己构造seh很重要的一点是链接时要有safeseh:no
自己对照着看吧
上传的附件:
2013-4-16 11:22
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
而且出了问题要会调试啊...不要直接把问题丢给别人
2013-4-16 11:24
0
游客
登录 | 注册 方可回帖
返回
//