【主機】kernel: XXX [ ]: segfault at rip rsp error N

楊奇龍發表於2011-08-24
工作中突然接到手機報警:
kernel: exp[24505]: segfault at 000000000000053c rip 00002abe2df39eb8 rsp 00007fff7d147290  error  4 
一時沒有頭緒,搜尋一番,看到一些解釋:
kernel : *** : segfault at 0000000000000011 rip 00000032f8670454 rsp 000000004128fd30 error 4
kernel: exp[24505]: segfault at 000000000000053c rip 00002abe2df39eb8 rsp 00007fff7d147290  error  4

這種資訊一般都是由記憶體訪問越界造成的,不管是使用者態程式還是核心態程式訪問越界都會出core, 並在系統日誌裡面輸出一條這樣的資訊。
其中 kernel 後面的exp 代表程式名,[24505]程式ID號,
segfault at 000000000000053c rip 00002abe2df39eb8 rsp 00007fff7d147290 訪問越界的地址以及當時程式堆疊地址等資訊,最後的是error number. 
在上面的資訊中,error number是4 ,下面詳細介紹一下error number的資訊:
在上面的例子中,error number是4, 轉成二進位制就是100, 即bit2=1, bit1=0, bit0=0, 按照上面的解釋,我們可以得出這條資訊是由於使用者態程式讀操作訪問越界造成的。
error number是由三個字位組成的,從高到底分別為bit2 bit1和bit0,所以它的取值範圍是0~7.
bit2: 值為1表示是使用者態程式記憶體訪問越界,值為0表示是核心態程式記憶體訪問越界
bit1: 值為1表示是寫操作導致記憶體訪問越界,值為0表示是讀操作導致記憶體訪問越界
bit0: 值為1表示沒有足夠的許可權訪問非法地址的內容,值為0表示訪問的非法地址根本沒有對應的頁面,也就是無效地址

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-705688/,如需轉載,請註明出處,否則將追究法律責任。

相關文章