+ -
当前位置:首页 → 问答吧 → 月经结贴 -- 《Segmentation Fault in Linux》

月经结贴 -- 《Segmentation Fault in Linux》

时间:2009-12-21

来源:互联网



QUOTE:
写在前面的话
    最近CU(chinaunix)出现了很多问segmentation fault的帖子,其实这也是个“月经贴”了,泡CU几年,每个月都有人问。为了减少重复回帖,笔者结合自己的经验,总结了SIGSEGV在Linux中产生的机理,并用实际例子概括哪些编程错误容易引发SIGSEGV。由于本人经验有限,文中难免有疏漏和错误,请发现的朋友发信到[email protected]指正,笔者好即使修改。




QUOTE:
内容提要
  本文简单介绍了Segmentation fault发生的原因,结合实际例子描述了内核向用户态程序发送SIGSEGV信号的流程。文中以实例回答了常见的一些SIGSEGV问题,例如“为什么函数返回了栈还可以访问?”、“为什么free()后的内存仍然可以使用”、“为什么我遇到的是SIGSEGV而不是SIGILL信号”等。最后笔者结合自己的经验,列举了一些预防SIGSEGV的编程习惯,供大家参考。SIGSEGV严格依赖操作系统、编译器、硬件平台,本文基于Linux、GCC、32bit IA32架构,但对其他平台操作系统也有借鉴意义。



大家在阅读的过程中发现什么错误,或我没有讲到的segfault情况,请及时指出,我好更正。

此贴附件不知为何没有了,大家可以到
http://bbs.chinaunix.net/thread-1632005-1-2.html
下载

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

Segmentation fault in Linux.pdf (309.26 KB)

下载次数:1911

2009-12-21 17:24

Segmentation fault in Linux.pdf (309.26 KB)

下载次数:384

2010-01-11 09:35

作者: zx_wing   发布时间: 2009-12-21

最近内核版真是好文辈出啊!

作者: Godbach:   发布时间: 2009-12-21

楼主是大牛啊
俺只能找typo啦
17页“内核使用 fixup的技巧来处理在处理此类错误。”

作者: liying_gg:   发布时间: 2009-12-21



QUOTE:
原帖由 platinum 于 2009-12-21 17:35 发表
最近内核版真是好文辈出啊!



众人拾柴火焰高啊。多谢zw_xing兄分享啊。

作者: platinum   发布时间: 2009-12-21

内核中的page fault应该也总结总结

作者: nait   发布时间: 2009-12-21

zw_xiong,图2中流程3和4是怎么关联起来的,条件3返回No的时候,走4吗

作者: Godbach   发布时间: 2009-12-22

系统的看了一下全文,大有裨益,多谢zw_xing兄。

作者: emmoblin   发布时间: 2009-12-22



QUOTE:
原帖由 Godbach 于 2009-12-22 11:28 发表
zw_xiong,图2中流程3和4是怎么关联起来的,条件3返回No的时候,走4吗


是的
这里两条线有点重

作者: Godbach   发布时间: 2009-12-22



QUOTE:
原帖由 zx_wing 于 2009-12-22 12:46 发表

是的
这里两条线有点重


明白了

作者: Godbach   发布时间: 2009-12-22

多谢LZ总结!
看到一个字误,标注下,能否更新下PDF,谢谢!


QUOTE:
2 指针越界和SIGSEGV。。。
一个越界的指针,如果不解引用它。。。而即使解引用了一个越界的指针


[ 本帖最后由 duanjigang 于 2009-12-23 10:08 编辑 ]

作者: zx_wing   发布时间: 2009-12-23



QUOTE:
原帖由 duanjigang 于 2009-12-23 10:05 发表
多谢LZ总结!
看到一个字误,标注下,能否更新下PDF,谢谢!


多谢,我相等Feedback多一点后一起改。
此外,这个“解”字什么地方错了呢 没看出来 。。。。

作者: Godbach   发布时间: 2009-12-23



QUOTE:
原帖由 zx_wing 于 2009-12-23 10:53 发表

多谢,我相等Feedback多一点后一起改。
此外,这个“解”字什么地方错了呢 没看出来 。。。。



“解”字没错,呵呵,只是这句话中这里用个“解”字好像不通,是不是别的字打成这个字了,哈哈,汉语语句没读懂。。
都咬文嚼字了

作者: duanjigang   发布时间: 2009-12-23



QUOTE:
原帖由 duanjigang 于 2009-12-23 11:08 发表


“解”字没错,呵呵,只是这句话中这里用个“解”字好像不通,是不是别的字打成这个字了,哈哈,汉语语句没读懂。。
都咬文嚼字了


这里的“解”表示 “解引用指针”

作者: zx_wing   发布时间: 2009-12-23

我觉得这是对的丫

作者: duanjigang   发布时间: 2009-12-23

写得真好

作者: zx_wing   发布时间: 2009-12-23

不错 ,把 用户态 出现 segmentation violation 出现的情况都列出来了 .good

作者: nait   发布时间: 2009-12-24

非常好,条理清楚,有潜质,有前途。

作者: libra811   发布时间: 2009-12-24

LZ写的太好了,很清晰。偶学习了。
期待你的下一篇....

作者: kendyke   发布时间: 2009-12-24

初来乍到,看到如此美文,岂能不顶

作者: chengdot   发布时间: 2009-12-24

好文章 谢谢楼主

作者: cindylzh   发布时间: 2009-12-24

仔细的看了一遍,很是受益,谢谢~~

作者: rf0000   发布时间: 2009-12-25

请教楼主,我在用户态用如下代码dump cr3后segfault是什么情况呢?
代码:__asm__("movl %%cr3, %0;": "=r" (a));

作者: zhj1011   发布时间: 2009-12-25



QUOTE:
原帖由 nait 于 2009-12-25 14:44 发表
请教楼主,我在用户态用如下代码dump cr3后segfault是什么情况呢?
代码:__asm__("movl %%cr3, %0;": "=r" (a));


这个我要查一下了,我不记得用户态是否可以读CR3了。

作者: anders0913   发布时间: 2009-12-26

好文,支持

作者: nait   发布时间: 2009-12-27

拜读zx_wing 大牛的精品文章。

作者: zx_wing   发布时间: 2009-12-27

这个,好文章,有时候自己也会遇到一些,最后很多发现可能都是指针有问题,没总结过,看了这个应该会有很大帮助,顶起

作者: cgweb   发布时间: 2009-12-27

good

作者: scutan   发布时间: 2009-12-28

楼主好伟大啊   顶了

作者: li32768   发布时间: 2010-01-04

精帖,顶!

作者: xulang   发布时间: 2010-01-04

已经下载了 对我很有用

作者: 信步中庭   发布时间: 2010-01-04

热门下载

更多