dai*_*isy 4 x86 assembly exception masm seh
ASSUME FS:NOTHING
PUSH OFFSET Handler
PUSH FS:[0]
MOV FS:[0], ESP
...
Run Code Online (Sandbox Code Playgroud)
但FS:[0]应该持有处理程序的地址而不是吗?
所以mov fs:[0], esp是错的,因为esp目前指向原文fs:[0]:
堆栈是这样的:
-----------
| fs:[0] | <-- ESP
-----------
| handler |
-----------
Run Code Online (Sandbox Code Playgroud)
那么,这不应该esp + 4像东西一样吗?我显然是错的,但我不明白为什么.
[fs:0] 指向异常处理程序的链接列表中的最后一个元素.
每个元素包含两件事:
您呈现的代码创建另一个元素,将其链接到当前/最后一个元素,并使新元素成为当前/最后一个元素.
查看Matt Pietrek关于SEH的文章.这些内容在那里有更详细的描述.