2013-01-15 39 views
4

我抓起一些code from internet,那應該處理與SEH例外,這個asm代碼如何設置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一樣的東西?我顯然是錯的,但我不明白爲什麼。

回答

7

[fs:0]指向異常處理程序鏈接列表中的最後一個元素。

每個元素都包含了兩兩件事:

  1. 下一個/前一個元素
  2. 處理程序的地址的地址/功能

,你給出的代碼創建了另一個元素,鏈接它到當前/最後一個元素,並使新元素成爲當前/最後一個元素。

查看Matt Pietrek在SEH上的文章。這些東西在那裏更詳細地描述。

+1

此外,請勿像這樣手動修改TEB,而應使用相應的API函數。 – 2013-01-15 12:42:05

相關問題