【问题标题】:How does this asm code setup SEH?这个 asm 代码如何设置 SEH?
【发布时间】:2013-01-15 11:22:42
【问题描述】:

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

【问题讨论】:

    标签: exception assembly x86 masm seh


    【解决方案1】:

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

    每个元素包含两件事:

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

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

    查看 Matt Pietrek 关于 SEH 的文章。那里有更详细的描述。

    【讨论】:

    • 另外,不要像这样手动修改TEB,而是使用适当的API函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    相关资源
    最近更新 更多