我抓住了一些code from internet,它应该用SEH来处理异常,
ASSUME FS:NOTHING
PUSH OFFSET Handler
PUSH FS:[0]
MOV FS:[0], ESP
...
但FS:[0]
应该保留处理程序的地址吗?
所以mov fs:[0], esp
错了,因为esp
目前指向原fs:[0]
:
堆栈是这样的:
-----------
| fs:[0] | <-- ESP
-----------
| handler |
-----------
那么,不应该是esp + 4
喜欢的东西吗?我明显错了,但我不明白为什么。
答案 0 :(得分:7)
[fs:0]
指向异常处理程序链接列表中的最后一个元素。
每个元素包含两件事:
您提供的代码会创建另一个元素,将其链接到当前/最后一个元素,并使新元素成为当前/最后一个元素。
查看Matt Pietrek关于SEH的文章。这些内容在那里有更详细的描述。