4

はインターネットからいくつかのコードを取得しました。これはSEHで例外を処理することになっています。

  ASSUME FS:NOTHING
  PUSH  OFFSET Handler
  PUSH  FS:[0]
  MOV  FS:[0], ESP
  ...

しかし、FS:[0]代わりにハンドラーのアドレスを保持する必要がありますか?

現在、オリジナルを指しているのでmov fs:[0], esp、間違っています:espfs:[0]

スタックは次のようになります。

-----------
| fs:[0]  |  <-- ESP
-----------
| handler |
-----------

だから、それはもののようにすべきではありませんesp + 4か?私は明らかに間違っていますが、理由はわかりません。

4

1 に答える 1

8

[fs:0]例外ハンドラのリンクリストの最後の要素を指します。

各要素には2つのものが含まれています。

  1. 次/前の要素のアドレス
  2. ハンドラー/関数のアドレス

提示したコードは、別の要素を作成し、それを現在/最後の要素にリンクして、新しい要素を現在/最後の要素にします。

SEHに関するMattPietrekの記事を調べてください。このようなものはそこでより詳細に説明されています。

于 2013-01-15T11:36:14.270 に答える