鱼C论坛

 找回密码
 立即注册
查看: 2208|回复: 6

Win32汇编:这三条指令无法理解

[复制链接]
发表于 2014-10-12 16:58:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冰霜烛火 于 2014-10-15 21:39 编辑

Win32汇编 517 页处,SEH 处理异常,里面的 NT_TIB结构
书上说:
               push    offset  _Handler
               push    fs: [0]
               mov     fs: [0],esp


第一条指令 push  offset _Handler 指令将回调函数的地址推入堆栈;

第二条指令 push  fs: [0] 指令则将原先使用的 EXCEPTION_REGISTRATION 结构地址推入堆栈,

现在堆栈指令 ESP 指向的地方刚好是一个新的 EXCEPTION_REGISTRATION  结构——


[ESP] 等于原始结构地址,也就是prev字段,而 [ESP+4] 等于回调函数地址,也就是 handler 字段;


当第三条指令 mov fs:[0],esp,将 ESP 的值放入 fs:[0]后,设置工作就完成了!




前两条指令的说明勉强可以理解,后面的说明就想不通了,有没前辈走过的指点一下?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-12 19:23:08 | 显示全部楼层
本帖最后由 漩涡鸣人 于 2014-10-12 19:25 编辑

没什么难理解的吧,举个例子执行完前两句,堆栈顶部状态如下图:
异常处理程序指向示意.jpg

评分

参与人数 1荣誉 +8 鱼币 +8 贡献 +3 收起 理由
小靚同学Leon + 8 + 8 + 3 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-13 15:29:18 | 显示全部楼层
漩涡鸣人 发表于 2014-10-12 19:23
没什么难理解的吧,举个例子执行完前两句,堆栈顶部状态如下图:

谢谢你的回复,第一句只是把回调函数的地址堆入栈,第二PUSH FS:[0] 乱了,只是把ExceptionList个字段堆入吧,ExceptionList字段又指向另一个结构,结构第一字段是prev(前一个ExceptionList 结构的地址),那这个PUSH的内容到底是什么 ……还是模糊了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-13 21:44:26 | 显示全部楼层
本帖最后由 漩涡鸣人 于 2014-10-13 21:45 编辑
冰霜烛火 发表于 2014-10-13 15:29
谢谢你的回复,第一句只是把回调函数的地址堆入栈,第二PUSH FS:[0] 乱了,只是把ExceptionList个字段堆 ...


就形成一个链表而已,push FS:[0]就是把上一个ExceptionList的值压栈,ExceptionList指向链表首结点,也就是说新节点指向原链表首节点
图片说明:
seh11.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-10-13 22:59:51 | 显示全部楼层
不会,帮楼主顶上去

评分

参与人数 1鱼币 -1 收起 理由
漩涡鸣人 -1 请勿在技术区重复回复无意义内容

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-15 21:37:57 | 显示全部楼层
漩涡鸣人 发表于 2014-10-13 21:44
就形成一个链表而已,push FS:[0]就是把上一个ExceptionList的值压栈,ExceptionList指向链表首结点, ...

明白了,谢谢你,前辈!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-18 01:00:01 | 显示全部楼层
高手云集   俺来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表