亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 月經(jīng)結貼 -- 《Segmentation Fault in Linux》 [打印本頁]

作者: zx_wing    時間: 2009-12-21 17:24
標題: 月經(jīng)結貼 -- 《Segmentation Fault in Linux》
寫在前面的話
    最近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)也有借鑒意義。


大家在閱讀的過程中發(fā)現(xiàn)什么錯誤,或我沒有講到的segfault情況,請及時指出,我好更正。

此貼附件不知為何沒有了,大家可以到
http://www.72891.cn/thread-1632005-1-2.html
下載

[ 本帖最后由 zx_wing 于 2010-1-15 22:04 編輯 ]

Segmentation fault in Linux.pdf

309.26 KB, 下載次數(shù): 4995

Segmentation fault in Linux.pdf

309.26 KB, 下載次數(shù): 1747


作者: platinum    時間: 2009-12-21 17:35
最近內(nèi)核版真是好文輩出!
作者: nait    時間: 2009-12-21 20:05
樓主是大牛啊
俺只能找typo啦
17頁“內(nèi)核使用 fixup的技巧來處理在處理此類錯誤!

作者: Godbach    時間: 2009-12-21 21:07
原帖由 platinum 于 2009-12-21 17:35 發(fā)表
最近內(nèi)核版真是好文輩出。


眾人拾柴火焰高啊。多謝zw_xing兄分享啊。
作者: emmoblin    時間: 2009-12-21 22:56
內(nèi)核中的page fault應該也總結總結
作者: Godbach    時間: 2009-12-22 11:28
標題: 回復 #1 zx_wing 的帖子
zw_xiong,圖2中流程3和4是怎么關聯(lián)起來的,條件3返回No的時候,走4嗎
作者: Godbach    時間: 2009-12-22 11:41
系統(tǒng)的看了一下全文,大有裨益,多謝zw_xing兄。
作者: zx_wing    時間: 2009-12-22 12:46
原帖由 Godbach 于 2009-12-22 11:28 發(fā)表
zw_xiong,圖2中流程3和4是怎么關聯(lián)起來的,條件3返回No的時候,走4嗎

是的
這里兩條線有點重
作者: Godbach    時間: 2009-12-22 12:57
原帖由 zx_wing 于 2009-12-22 12:46 發(fā)表

是的
這里兩條線有點重

明白了
作者: duanjigang    時間: 2009-12-23 10:05
多謝LZ總結!
看到一個字誤,標注下,能否更新下PDF,謝謝!
2 指針越界和SIGSEGV。。。
一個越界的指針,如果不引用它。。。而即使引用了一個越界的指針

[ 本帖最后由 duanjigang 于 2009-12-23 10:08 編輯 ]
作者: zx_wing    時間: 2009-12-23 10:53
原帖由 duanjigang 于 2009-12-23 10:05 發(fā)表
多謝LZ總結!
看到一個字誤,標注下,能否更新下PDF,謝謝!

多謝,我相等Feedback多一點后一起改。
此外,這個“解”字什么地方錯了呢 沒看出來 。。。。
作者: duanjigang    時間: 2009-12-23 11:08
原帖由 zx_wing 于 2009-12-23 10:53 發(fā)表

多謝,我相等Feedback多一點后一起改。
此外,這個“解”字什么地方錯了呢 沒看出來 。。。。


“解”字沒錯,呵呵,只是這句話中這里用個“解”字好像不通,是不是別的字打成這個字了,哈哈,漢語語句沒讀懂。。
都咬文嚼字了
作者: zx_wing    時間: 2009-12-23 11:21
原帖由 duanjigang 于 2009-12-23 11:08 發(fā)表


“解”字沒錯,呵呵,只是這句話中這里用個“解”字好像不通,是不是別的字打成這個字了,哈哈,漢語語句沒讀懂。。
都咬文嚼字了

這里的“解”表示 “解引用指針”
作者: nait    時間: 2009-12-23 13:22
我覺得這是對的丫
作者: libra811    時間: 2009-12-23 13:47
寫得真好
作者: kendyke    時間: 2009-12-24 09:25
不錯 ,把 用戶態(tài) 出現(xiàn) segmentation violation 出現(xiàn)的情況都列出來了 .good
作者: chengdot    時間: 2009-12-24 10:11
非常好,條理清楚,有潛質,有前途。
作者: cindylzh    時間: 2009-12-24 12:15
LZ寫的太好了,很清晰。偶學習了。
期待你的下一篇....
作者: rf0000    時間: 2009-12-24 13:54
初來乍到,看到如此美文,豈能不頂
作者: zhj1011    時間: 2009-12-24 15:33
標題: 回復 #1 zx_wing 的帖子
好文章 謝謝樓主
作者: anders0913    時間: 2009-12-25 13:09
仔細的看了一遍,很是受益,謝謝~~
作者: nait    時間: 2009-12-25 14:44
請教樓主,我在用戶態(tài)用如下代碼dump cr3后segfault是什么情況呢?
代碼:__asm__("movl %%cr3, %0;": "=r" (a));
作者: zx_wing    時間: 2009-12-26 17:24
原帖由 nait 于 2009-12-25 14:44 發(fā)表
請教樓主,我在用戶態(tài)用如下代碼dump cr3后segfault是什么情況呢?
代碼:__asm__("movl %%cr3, %0;": "=r" (a));

這個我要查一下了,我不記得用戶態(tài)是否可以讀CR3了。
作者: cgweb    時間: 2009-12-27 09:34
標題: 好文,支持
好文,支持
作者: scutan    時間: 2009-12-27 10:34
拜讀zx_wing 大牛的精品文章。
作者: li32768    時間: 2009-12-27 18:54
這個,好文章,有時候自己也會遇到一些,最后很多發(fā)現(xiàn)可能都是指針有問題,沒總結過,看了這個應該會有很大幫助,頂起
作者: xulang    時間: 2009-12-28 15:03
good
作者: 信步中庭    時間: 2010-01-04 09:36
樓主好偉大啊   頂了
作者: hellokitty_1573    時間: 2010-01-04 10:18
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: bayernarena    時間: 2010-01-04 22:04
已經(jīng)下載了 對我很有用
作者: hongmy525    時間: 2010-01-06 09:50
也讀了一遍,確實總結得很好,謝謝zx_wing 大俠~,哈哈

2.4的前面幾個源碼的例子的情景是不是不算棧溢出呢?
作者: zhenchengjin    時間: 2010-01-08 14:35
哪里 看?
作者: 貓?zhí)聂~    時間: 2010-01-08 18:46
為什么我一直看不到附件呢?
作者: willian5656    時間: 2010-01-09 00:47

作者: szjrabbit    時間: 2010-01-09 11:57
為什么我看到的是
“附件審核中”
??
作者: mailwxg    時間: 2010-01-10 16:12
怎么看不到附件呢?lz刪了?
作者: ryan3216    時間: 2010-01-10 20:30
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: wjbwsb    時間: 2010-01-10 23:56
想看附件啊。。。怎么下不到了啊。。。。來晚了
作者: scutan    時間: 2010-01-11 00:09
我也不太清楚是怎么回事,我給zx_wing 兄發(fā)了站內(nèi)信了,請他有空的時候再上傳一下。
另外,在下面的鏈接中也有這個文檔,可以暫時先看看:
http://www.72891.cn/viewthr ... p%3Bfilter%3Ddigest
作者: zx_wing    時間: 2010-01-11 09:36
我重新上傳了,但還是現(xiàn)實“附件審核中”,什么原因呢?
作者: ubuntuer    時間: 2010-01-11 10:02
附件審核ing
作者: brynx    時間: 2010-01-15 09:35
學習
作者: fuxin46    時間: 2010-01-15 14:56
怎么看不到附件
作者: Fancy_Jeans    時間: 2010-01-27 01:00
看了以后,受益匪淺
作者: accessory    時間: 2010-02-16 10:09
我來補充下。還有一種情況可以說也包括在LZ講的里面了,不過單獨再說下,也許更清楚。

下面這個程序也會產(chǎn)生SIGMENTATION FAULT
  1. ioperm(0xc1da, 1,1);
  2. outw(3, 0xc1da);
復制代碼
為什么呢?因為IOPERM這里只允許了一個字節(jié)的讀寫,而在后面的OUTW中,企圖讀寫一個WORD。

22樓的情況也類似,CR3在用戶態(tài)是不允許訪問的。

注:IOPERM 的說明
int ioperm(unsigned long from, unsigned long num, int turn_on);

Description
Ioperm sets the port access permission bits for the process for num bytes starting from port address from to the value turn_on. The use of ioperm() requires root privileges.

PS:我用GDB調(diào)試的時候,由于是用內(nèi)嵌匯編寫的代碼,GDB總是停在第一行MOVW的地方,搞得我郁悶了好久。最后總算發(fā)現(xiàn)是由于OUTW指令引起的
作者: 湖里的魚    時間: 2010-08-10 17:19
向樓主致敬
作者: mengmengbud    時間: 2010-08-11 17:31
回復 1# zx_wing


流程圖畫的很漂亮,樓主是用什么畫的。
作者: EZWORD    時間: 2010-08-30 21:11
學習了,好帖子
作者: npuazm    時間: 2011-07-01 13:59
好文章,謝謝樓主的share
作者: hhuohd2    時間: 2012-04-09 09:10
牛人都是牛人
作者: cjdao    時間: 2012-04-09 09:48
樓主牛逼,頂上!
作者: sd895530    時間: 2012-04-09 10:10
多謝樓主~
作者: jiuzhuaxiong    時間: 2012-06-20 23:43
不錯啊,多謝。。。。!
作者: z75993971    時間: 2012-06-26 12:28
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: hk2305621    時間: 2012-09-01 20:04
好文章, 豈能錯過. 經(jīng)常遇到這個問題. 不過, 我遇到的時候, 很多時候都是數(shù)據(jù)類型錯誤而引起的. 看看文章, 解解疑惑


作者: lcsmm    時間: 2013-07-12 15:22
好東西!
作者: cascle    時間: 2015-09-18 19:04
這個真是精華




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2