關於內存越界

kernel : *** : segfault at 0000000000000011 rip 00000032f8670454 rsp 00
0000004128fd30 error 6

這 種信息通常都是由內存訪問越界形成的,無論是用戶態程序仍是內核態程序訪問越界都會出core, 並在系統日誌裏面輸出一條這樣的信息。這條信息的前面分別是訪問越界的程序名,進程ID號,訪問越界的地址以及當時進程堆棧地址等信息,比較有用的信息是 最後的error number. 在上面的信息中,error number是4 ,下面詳細介紹一下error number的信息:
在上面的例子中,error number是6, 轉成二進制就是110, 即bit2=1, bit1=1, bit0=0, 按照上面的解釋,咱們能夠得出這條信息是因爲用戶態程序讀操做訪問越界形成的。
error number是由三個字位組成的,從高到底分別爲bit2 bit1和bit0,因此它的取值範圍是0~7.

bit2: 值爲1表示是用戶態程序內存訪問越界,值爲0表示是內核態程序內存訪問越界
bit1: 值爲1表示是寫操做致使內存訪問越界,值爲0表示是讀操做致使內存訪問越界
bit0: 值爲1表示沒有足夠的權限訪問非法地址的內容,值爲0表示訪問的非法地址根本沒有對應的頁面,也就是無效地址ide

相關文章
相關標籤/搜索