月经结贴 -- 《Segmentation Fault in Linux》
时间:2009-12-21
来源:互联网
最近CU(chinaunix)出现了很多问segmentation fault的帖子,其实这也是个“月经贴”了,泡CU几年,每个月都有人问。为了减少重复回帖,笔者结合自己的经验,总结了SIGSEGV在Linux中产生的机理,并用实际例子概括哪些编程错误容易引发SIGSEGV。由于本人经验有限,文中难免有疏漏和错误,请发现的朋友发信到[email protected]指正,笔者好即使修改。
本文简单介绍了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)

Segmentation fault in Linux.pdf (309.26 KB)
作者: zx_wing 发布时间: 2009-12-21
作者: Godbach: 发布时间: 2009-12-21
俺只能找typo啦
17页“内核使用 fixup的技巧来处理在处理此类错误。”


作者: liying_gg: 发布时间: 2009-12-21
最近内核版真是好文辈出啊!
众人拾柴火焰高啊。多谢zw_xing兄分享啊。
作者: platinum 发布时间: 2009-12-21
作者: nait 发布时间: 2009-12-21
作者: Godbach 发布时间: 2009-12-22
作者: emmoblin 发布时间: 2009-12-22
zw_xiong,图2中流程3和4是怎么关联起来的,条件3返回No的时候,走4吗
是的
这里两条线有点重
作者: Godbach 发布时间: 2009-12-22
是的
这里两条线有点重
明白了
作者: Godbach 发布时间: 2009-12-22
看到一个字误,标注下,能否更新下PDF,谢谢!
一个越界的指针,如果不解引用它。。。而即使解引用了一个越界的指针
[ 本帖最后由 duanjigang 于 2009-12-23 10:08 编辑 ]
作者: zx_wing 发布时间: 2009-12-23
多谢LZ总结!
看到一个字误,标注下,能否更新下PDF,谢谢!
多谢,我相等Feedback多一点后一起改。
此外,这个“解”字什么地方错了呢

作者: Godbach 发布时间: 2009-12-23
多谢,我相等Feedback多一点后一起改。
此外,这个“解”字什么地方错了呢





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

都咬文嚼字了

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




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

都咬文嚼字了

这里的“解”表示 “解引用指针”
作者: zx_wing 发布时间: 2009-12-23
作者: duanjigang 发布时间: 2009-12-23
作者: zx_wing 发布时间: 2009-12-23
作者: nait 发布时间: 2009-12-24
作者: libra811 发布时间: 2009-12-24
期待你的下一篇....
作者: kendyke 发布时间: 2009-12-24
作者: chengdot 发布时间: 2009-12-24
作者: cindylzh 发布时间: 2009-12-24

作者: rf0000 发布时间: 2009-12-25
代码:__asm__("movl %%cr3, %0;": "=r" (a));
作者: zhj1011 发布时间: 2009-12-25
请教楼主,我在用户态用如下代码dump cr3后segfault是什么情况呢?
代码:__asm__("movl %%cr3, %0;": "=r" (a));
这个我要查一下了,我不记得用户态是否可以读CR3了。
作者: anders0913 发布时间: 2009-12-26
作者: nait 发布时间: 2009-12-27
作者: zx_wing 发布时间: 2009-12-27
作者: cgweb 发布时间: 2009-12-27
作者: scutan 发布时间: 2009-12-28
作者: li32768 发布时间: 2010-01-04
作者: xulang 发布时间: 2010-01-04
作者: 信步中庭 发布时间: 2010-01-04
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28