2008-09-26 42 views
2

運行我們的軟件之一時,測試人員遇到了Windows的數據執行預防對話框。跟蹤數據執行保護(DEP)

我們試圖在開發人員計算機上重現這種情況以進行調試:沒有成功。

有誰知道如何找到什麼可能導致DEP保護殺死應用程序? 是否有任何現有的工具可用於此?

回答

4

DEP對話框通常只會在您嘗試執行來自您未標記爲可執行文件的區域的代碼時顯示。這可能是由於您正在使用的圖書館中有「thunk」引起的,例如ATL窗口。 ATL 8.0中解決此問題。

通過將返回地址設置爲不可執行的位置,堆棧搗毀的bug(例如緩衝區溢出)也可能導致此問題。這可能不會導致訪問衝突,而是奇怪的行爲,如果關閉進程的DEP或硬件上不可用。

如果您拋出C++異常或引發SEH異常,並且您的結構化異常處理程序已被緩衝區溢出刪除,也可能發生這種情況。

0

可能我會想,如果您嘗試寫入未分配的內存,那麼這可能是一個可能的結果。可能是刪除一個對象然後使用它,或者將一個字符串寫入一個太小而不能容納它的緩衝區。

+0

我知道DEP可以殺死我的應用程序的所有原因。問題是,應用程序是10年持有,包含了大量的代碼和庫。手工找到可能的原因有些問題。 – Nicolas 2008-09-26 14:49:10

0

DEP受硬件能力的影響。我們最近有一種情況,我們的應用在舊機器上運行良好,但會在新機器上失敗。事實證明,儘管舊服務器和新服務器都啓用了DEP,但我們在新服務器上崩潰,因爲硬件檢測更好,更具侵略性,或者類似的東西。因此,如果您的質量檢查可以複製,但是DEV不能,那麼請嘗試使用相同的硬件......儘管質量檢查會比開發者擁有更新/更好的PC似乎不合理......我完全相信它!
這裏是我對我們最近的經驗與筆記: Incompatibilities between Indy 9 and Windows Server 2003?