首页
社区
课程
招聘
[求助]請問如何處理二個異常同時發生呢
发表于: 2007-7-27 03:32 4170

[求助]請問如何處理二個異常同時發生呢

2007-7-27 03:32
4170
各位前輩您們好

我遇到的問題就是,我利用jmp指令讓EIP去執行一串Hex值
並且將Trap Flag設置為1,接下來就針對Single Step Exception跟Access Violation Exception去做處理

假設那串Hex的第一個指令就會引發Access Violation Exception,所以就會同時有二個異常發生,一個是Single Step一個是Access Violation,而如果我先針對Single Step做處理,結果Access Violation異常就會變成系統去處理,我就無法攔截到Access Violation,請問各位前輩們,這種情況該如何解決呢,我的開發環境是Visual Studio 2005 (VC)

已經困惑很久了,謝謝指教!!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
太客气了,不明白你想说什么
2007-7-27 13:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
paf
3
以下是我代碼的內容,請各位前輩給予指教,謝謝


EXCEPTION_DISPOSITION myHandler(
    _EXCEPTION_RECORD *ExcRecord,
    void * EstablisherFrame, 
    _CONTEXT *ContextRecord,
    void * DispatcherContext)
{
	if(ExcRecord->ExceptionCode == 0x80000004)
	{
		printf("Single Step Exception\n");
		ContextRecord->EFlags |= 0x100;
	}
	if(ExcRecord->ExceptionCode == 0xC0000005)
	{
		printf("Access Violation Exception\n");
	}
	return ExceptionContinueExecution;
}


void bar()
{
	unsigned char *point;
	unsigned char buf[] = 
	// 一串亂數的Hex
	"\x11\x11\xaa\x82\x4a\x11\x11\x11\x2f\x10\x11\x11\x11\x94";

	point = buf;

	EXCEPTION_REGISTRATION reg, *preg = ®
	reg.handler = (DWORD)myHandler;
 
	DWORD prev;

	__asm
	{
		mov EAX, FS:[0]
		mov prev, EAX
	}
	reg.prev = (EXCEPTION_REGISTRATION*) prev;
 
	__asm
	{
		mov EAX, preg
		mov FS:[0], EAX
	}

	__asm
	{
		pushfd
		pushfd
		or dword ptr [esp],0x100
		popfd
		jmp point
	}
}


int _tmain(int argc, _TCHAR* argv[])
{
	printf("Hello World\n");
	bar();

	return 0;
}
2007-7-27 14:45
0
游客
登录 | 注册 方可回帖
返回