2010-03-01 77 views
2

所以,我從C#代碼中的非託管.dll文件調用一個函數。根據傳遞給該函數的參數,它可能會導致「運行時檢查失敗#0 - ESP的值不正確」錯誤。這對於函數來說是完全正常的行爲(是的,我知道這聽起來很奇怪,但忍受着我)。 但是,如果發生這種情況,我希望能夠處理它,就像我會處理一個異常:只是優雅地失敗,向用戶輸出消息並避免崩潰我的整個程序。 這可能嗎?捕捉「運行時檢查失敗#0 - ESP的值不正確」

回答

1

如果使用GS標誌,則可以通過調用函數__set_security_error_handler來覆蓋該行爲。這使您可以指定在GS標誌和其他安全錯誤被觸發時調用的函數。

我強烈建議不要這樣做。任何經常破壞ESP的功能聽起來都是一個真正的問題。通過覆蓋此功能,您還可能冒着隱藏其他實際安全問題的風險。

更好的解決方案是將單個方法標記爲裸露,並防止發生GS檢查。

+0

如果我只是堅持在一個單獨的線程函數調用?有沒有辦法檢測線程是否崩潰? – 2010-03-01 02:47:20

相關問題