首页
社区
课程
招聘
[求助]SEH Handler中切换堆栈?
发表于: 2015-5-31 10:02 4042

[求助]SEH Handler中切换堆栈?

2015-5-31 10:02
4042
o_esp是用local声明的DWORD局部变量

假定这个异常正发生在MessageBoxA入口处。
执行到最后 o_esp的值变成了 3

		;切换堆栈
		mov o_esp,esp
		
		mov eax,[edi].regEsp
		mov esp,eax
		;构造函数框架
		push ebp
		mov ebp,esp
		
		mov eax,[ebp+12]
		invoke crt_printf,eax
		leave

		mov esp,o_esp


完整代码:
_Handler proc C	_lpRecord,_SEH,_lpContext,_lpDispCotext
	LOCAL @szBuffer[256]:byte
	LOCAL old:dword
	LOCAL o_esp:dword
	pushad
		mov esi,_lpRecord
		mov edi,_lpContext
		assume esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
		invoke crt_printf,addr szMsg,[edi].regEip,[esi].ExceptionCode,[esi].ExceptionFlags
		;切换堆栈
		mov o_esp,esp
		
		mov eax,[edi].regEsp
		mov esp,eax
		;构造函数框架
		push ebp
		mov ebp,esp
		
		mov eax,[ebp+12]
		invoke crt_printf,eax
		leave
		
		mov esp,o_esp
		
		invoke VirtualProtect,[edi].regEip,1,PAGE_EXECUTE_READWRITE,addr old
		
		
		;mov eax,_SEH
		;mov eax,[eax+4*2]
		;mov [edi].regEip,eax
		assume esi:nothing,edi:nothing
	popad
	mov eax,ExceptionContinueExecution	
	ret
_Handler endp

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=无名侠;1373608]o_esp是用local声明的DWORD局部变量

假定这个异常正发生在MessageBoxA入口处。
执行到最后 o_esp的值变成了 3

                ;切换堆栈
                mov o_esp,esp
               
                mov eax,[edi].regEsp
                mov esp,eax...[/QUOTE]

用c+汇编来写可以看的更清楚,纯汇编的,满篇都是寄存器,无法突出重点!
2015-5-31 15:54
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
o_esp 在esp 下面,又调用crt_printf,crt_printf要分配局部变量,可不就修改了o_esp内容了吗
2015-5-31 19:38
0
游客
登录 | 注册 方可回帖
返回
//