这个asm代码如何设置SEH?

时间:2013-01-15 11:22:42

标签: exception assembly x86 masm seh

我抓住了一些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喜欢的东西吗?我明显错了,但我不明白为什么。

1 个答案:

答案 0 :(得分:7)

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

每个元素包含两件事:

  1. 下一个/上一个元素的地址
  2. 处理程序/函数的地址
  3. 您提供的代码会创建另一个元素,将其链接到当前/最后一个元素,并使新元素成为当前/最后一个元素。

    查看Matt Pietrek关于SEH的文章。这些内容在那里有更详细的描述。