在Win32中怎样在自己的栈上添加SEH链头部?

cgaga 2002-01-04 04:21:24
在Win32中怎样在自己的栈上添加SEH链头部?
我创建了一个自己的运行栈
通过更改esp可以让程序在它上面运行
但是Win32提供的结构化异常处理(SEH)确失效了
不管使用
__try{...}__except(...){...}
__try{...}__finally{...}
还是c++的标准异常处理
try{...}catch(...){...}
都不行

我查阅《Windows核心编程》中有关SEH的内容
发现系统通过一个堆栈上的SEH链来实现多层异常捕获功能的嵌套。

我有查看了vc的汇编代码,发现每个使用到SEH的函数初始化处都有相同的结构
有别于普通的函数

//这两行构造函数的运行框架,每个函数都有
00401300 push ebp
00401301 mov ebp,esp

//这里是特别的地方
00401303 push 0FFh
00401305 push offset string "asdas"+0Ch (00420070)
0040130A push offset __except_handler3 (00401684)
0040130F mov eax,fs:[00000000]
00401315 push eax
00401316 mov dword ptr fs:[0],esp

//以下的代码也容易理解
0040131D add esp,0B8h
00401320 push ebx
00401321 push esi
00401322 push edi

其中 40130f,401315,401316三行明显构成了一个链表,类似于函数运行框架链表
这是SEH链表在栈上的结构


fs:[0] >-----------+ +-----------------+ +----->最终指向什么东西??
| | | |
---------------------V-|-----------------V-|--------
..... | + | .... | + |.... | 《-运行栈
----------------------------------------------------

我不知道链最终指向什么东西,我试过NULL,-1好像都没用


各位高手帮帮忙了??!





...全文
90 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cgaga 2002-01-04
  • 打赏
  • 举报
回复
多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢多谢!

15,446

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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