如何讓windows程式出錯後自動結束程序?

時間 2021-06-02 06:25:59

1樓:雨少主

你這個沒什麼簡單的辦法,別人幫不了你,只能告訴你原理。

你既然沒說重啟,那就不考慮重啟的問題了,其實也簡單,下面的內容會了你自然也知道怎麼設計。

思路就是寫乙個Windows服務或者類似的伺服程式(記為S),然後讓S跨程序訪問這款應用(記為A)。

不知道你說的對話方塊是什麼,這裡先假設是用 MessageBox 實現的,或者用其他的方式實現也可以,總歸逃不過那幾個輸出字串的Win32 API,在這個基礎上,用OD或其他除錯工具找到記憶體洩漏報錯時呼叫這個API的Call(記為C),此處以 MessageBox 為例(記為M)。

讓 S 通過 GetModuleHandle 獲取 "kernel32.dll" 的位址。

讓 S 通過 GetProcAddress 獲取 ExitProcess 函式的位址(記為X),因為它是在 "kernel32.dll" 中的,所以不受 ASLR 的影響。

讓 S 通過 OpenProcess 開啟 A。

讓 S 通過 VirtualProtectEx 將 A 中的 I 的屬性修改為可讀可寫和執行(預設的值可能是可讀可執行但不可寫) 。

直接讓 S 通過 WriteProcessMemory 將 C 從 Call M 改為 Call X 。

讓 S 通過 VirtualAllocEx 在 A 上分配一塊記憶體區域(記為I),可讀可寫可執行。

讓 S 通過 WriteProcessMemory 在 I 處寫一段機器碼,判斷字串引數是否是記憶體洩漏的,如果不是,跳轉到 C ,否則,呼叫 X。

讓 S 通過 WriteProcessMemory 將 C 從 Call M 改為 JMP I 。

2樓:Churros

使用try catch啊,catch到Exception就彈出exception的錯誤內容啊,然後下面加個結束程序的命令啊

如何將opengl程式從Windows上移植到linux上?

李Leo 問題解決了,其實OpenGL程式可移植性還是很好的,由於使用了glut庫,我的程式其實注釋掉windows.h就可以執行了。之前之所以出現錯誤,是因為顯示卡驅動的事。由於程式中用到了GLSL語言,包含if語句,這條語句中有兩條條件,通過或連線。沒有更新驅動之前,顯示卡認不認識這個if語句,...

作為程式設計師,如何從Windows平台轉型到Linux?

似乎在將來.net將成為win下前台開發的主流語言,前台開發c 會越來越少,做後台可能會好點,win下做後台開發,不給力,決定轉linu做後台開發。 江大河 我是從多年的Windows程式設計師轉到Linux開發的。這裡面的核心動力是你必須喜愛Linux。所以,永遠不要使用putty或者其他客戶端連...

如何讓Windows10不更新?

樂享極致 Windows 10的更新很多時候涉及電腦安全,因此不建議停止更新。如果一定要停止的話,可以使用 Windows搜尋 搜尋 服務,在裡面找到 Windows update 並將此項服務停止即可。 Ladd 1.組策略禁止 只要你不去點檢查更新,就永遠不會自動更新。優點 不影響其他安裝程式,...