寫在前面的話
最近CU(chinaunix)出現(xiàn)了很多問segmentation fault的帖子,其實這也是個“月經(jīng)貼”了,泡CU幾年,每個月都有人問。為了減少重復回帖,筆者結合自己的經(jīng)驗,總結了SIGSEGV在Linux中產(chǎn)生的機理,并用實際例子概括哪些編程錯誤容易引發(fā)SIGSEGV。由于本人經(jīng)驗有限,文中難免有疏漏和錯誤,請發(fā)現(xiàn)的朋友發(fā)信到xing5820@163.com指正,筆者好即使修改。
內(nèi)容提要
本文簡單介紹了Segmentation fault發(fā)生的原因,結合實際例子描述了內(nèi)核向用戶態(tài)程序發(fā)送SIGSEGV信號的流程。文中以實例回答了常見的一些SIGSEGV問題,例如“為什么函數(shù)返回了棧還可以訪問?”、“為什么free()后的內(nèi)存仍然可以使用”、“為什么我遇到的是SIGSEGV而不是SIGILL信號”等。最后筆者結合自己的經(jīng)驗,列舉了一些預防SIGSEGV的編程習慣,供大家參考。SIGSEGV嚴格依賴操作系統(tǒng)、編譯器、硬件平臺,本文基于Linux、GCC、32bit IA32架構,但對其他平臺操作系統(tǒng)也有借鑒意義。
Segmentation fault in Linux.pdf
309.26 KB, 下載次數(shù): 4995
Segmentation fault in Linux.pdf
309.26 KB, 下載次數(shù): 1747
2 指針越界和SIGSEGV。。。
一個越界的指針,如果不解引用它。。。而即使解引用了一個越界的指針
原帖由 duanjigang 于 2009-12-23 11:08 發(fā)表
![]()
![]()
![]()
![]()
“解”字沒錯,呵呵,只是這句話中這里用個“解”字好像不通,是不是別的字打成這個字了,哈哈,漢語語句沒讀懂。。![]()
都咬文嚼字了![]()
原帖由 nait 于 2009-12-25 14:44 發(fā)表
請教樓主,我在用戶態(tài)用如下代碼dump cr3后segfault是什么情況呢?
代碼:__asm__("movl %%cr3, %0;": "=r" (a));
歡迎光臨 Chinaunix (http://www.72891.cn/) | Powered by Discuz! X3.2 |