这个asm代码是如何设置SEH的?



我从互联网上抓取了一些代码,应该用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之类的东西吗?我显然错了,但我不明白为什么。

[fs:0]指向异常处理程序链表中的最后一个元素。

每个元素包含两个元素:

  1. 下一个/上一个元素的地址
  2. 处理程序/函数的地址

您展示的代码创建了另一个元素,将其链接到当前/最后一个元素,并使新元素成为当前/最后一个元素。

查阅Matt Pietrek关于SEH的文章。

最新更新