为什么我的SEH处理函数执行了两次?

maijian 2005-03-23 05:48:06
.386
.model flat,stdcall
option casemap:none

include d:\masm32\include\windows.inc
include d:\masm32\include\kernel32.inc
include d:\masm32\include\user32.inc
includelib d:\masm32\lib\kernel32.lib
includelib d:\masm32\lib\user32.lib

.data

szCaption db 'Win32汇编例子',0
szText db 'Win32汇编,Simple and powerful!',0

szSEHCaption db 'SEH Handler',0
szSEHText db 'Win32 Asm SEH Handler',0

.code

start:

assume fs:nothing
push offset Error_Handler
push fs:[0]
mov fs:[0],esp

invoke MessageBox,NULL,addr szText,addr szCaption,MB_OK
xor eax,eax
mov [eax],eax

pop fs:[0]
pop eax

invoke ExitProcess,NULL

Error_Handler proc uses ecx lpExceptRecord:DWORD,
lpFrame:DWORD,
lpContext:DWORD,
lpDispatch:DWORD

invoke MessageBox,NULL,addr szSEHText,addr szSEHCaption,MB_OK
ret
Error_Handler endp

end start
请问fs:[0]存放的是SEH处理函数指针还是指向上个SEH处理函数指针呢?
为什么我执行xor eax,eax mov [eax],eax激发异常时,执行了我的SEH函数两次呢?
还有,如果写正确的SEH呢?执行完自己的SEH后如果回复原来的SEH呢?
...全文
73 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sx_enter 2005-03-24
  • 打赏
  • 举报
回复
原因很简单,执行了seh之后,并没有往下执行。又回到原来的地方了。你要修改context让指令走到下一条。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧