亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Utility中遇到Page Fault錯誤怎么辦

發布時間:2021-12-22 10:46:59 來源:億速云 閱讀:140 作者:小新 欄目:互聯網科技

這篇文章將為大家詳細講解有關Utility中遇到Page Fault錯誤怎么辦,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

很多人在X86的設備里執行VxWorks應用時,遇到過Page Fault錯誤。

Utility中遇到Page Fault錯誤怎么辦

這是X86 CPU的14號異常,指的是訪問存儲器的指令發生了頁異常。

我以往的經驗,這樣情況多是地址錯誤引起的,而主要的地址錯誤就是棧溢出(或者叫棧越界)。我們寫個例子模擬一下

Utility中遇到Page Fault錯誤怎么辦

在X86的VxWorks里啟個任務執行它

Utility中遇到Page Fault錯誤怎么辦

可以看到任務t1的棧用的是默認值20000,但是代碼中有個0x10001的數組sss,很明顯棧不夠用的。sss的結束地址0x172a9db還在任務棧內,但sss的起始地址0x171a9db已經超出了棧的范圍[0x172aaa0,0x1725c80]。這時候再按一下鍵盤,就會出現剛剛的Page Fault了。

在實際工作中,給我們帶來困擾的一般是這個任務(例如t1)已經退出了,因此出現Page Fault時,用i或checkStack命令已經找不到罪魁禍首了。

在《Task之系統任務》里提到過,可以在任務的最后位置添加一個taskSuspend(0),把它掛起來。然后就可以用checkStack了

Utility中遇到Page Fault錯誤怎么辦

Utility中遇到Page Fault錯誤怎么辦

這樣就能抓到現形了。

在VxWorks里有個組件,INCLUDE_PROTECT_TASK_STACK,用于保護棧的溢出。我們加上它來試一試

Utility中遇到Page Fault錯誤怎么辦

這時候再執行同樣的程序后,VxWorks立刻重啟了,添加了taskSuspend(0)也沒用。在bootrom里,用e命令可以看到重啟的原因

Utility中遇到Page Fault錯誤怎么辦

有了這個保護,再有越界就會立刻重啟,不會把危險推后。因為有的時候越界,并不會立刻暴露問題。

既然說到了越界,還有一些比較常見的情況,例如數組越界、指針越界。看個例子

Utility中遇到Page Fault錯誤怎么辦

數組a2只有一個成員a2[0],但賦值時,寫入了兩個成員a2[0]和a2[1]。

Utility中遇到Page Fault錯誤怎么辦

可以看到,寫a2[1]時,實際操作的a3的地址

Utility中遇到Page Fault錯誤怎么辦

如果當前文件中,a2[]后面沒有聲明其它變量,那被操作的地址就很隱蔽了。我們再試一下

Utility中遇到Page Fault錯誤怎么辦

重啟VxWorks,我們先看看a2后面是誰

Utility中遇到Page Fault錯誤怎么辦

哦,有個變量叫runtimeName,人家的值是0x595239

然后執行程序,再看看它的值

Utility中遇到Page Fault錯誤怎么辦

后面那個變量runtimeName被修改了…

只要這個VxWorks系統沒有關機,在若干年之后,就可能有個任務訪問變量runtimeName,那時就會出問題,但那個時候,它只能背鍋了… 執行aaa的任務早跑了

關于“Utility中遇到Page Fault錯誤怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乡县| 内黄县| 安陆市| 南皮县| 都江堰市| 郸城县| 汕头市| 志丹县| 银川市| 肥乡县| 石家庄市| 阜城县| 温宿县| 中西区| 绥宁县| 九台市| 安西县| 闽清县| 泰宁县| 滦平县| 阳东县| 博客| 永康市| 丘北县| 乐清市| 东莞市| 武功县| 文水县| 曲阜市| 美姑县| 奇台县| 景谷| 裕民县| 河东区| 柏乡县| 五台县| 花莲市| 安平县| 乡城县| 湘潭市| 历史|