免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4226 | 回复: 11
打印 上一主题 下一主题

有关 segment default 错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-10 18:18 |只看该作者 |倒序浏览
segment default  错误 是因为内存不够吗?

论坛徽章:
0
2 [报告]
发表于 2007-06-10 18:22 |只看该作者
原帖由 gridbird 于 2007-6-10 18:18 发表
segment default  错误 是因为内存不够吗?

一般是写了不能写的内存吧,比如这块内存不是你的,你去写,就会发生错误
你分配空间了吗?写之前。

论坛徽章:
0
3 [报告]
发表于 2007-06-10 22:40 |只看该作者
原帖由 gridbird 于 2007-6-10 18:18 发表
segment default  错误 是因为内存不够吗?

这是原因之一,对于嵌入式系统以外的系统来说,这个原因基本不存在

论坛徽章:
0
4 [报告]
发表于 2007-06-11 10:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2007-06-13 16:06 |只看该作者
原帖由 ailantian 于 2007-6-10 18:22 发表

一般是写了不能写的内存吧,比如这块内存不是你的,你去写,就会发生错误
你分配空间了吗?写之前。


---------------------------------------------------------

还是这位老兄说的最直白,最地道。

ps:比较不喜欢这里某些人回答问题不地道,像卖弄一样

论坛徽章:
0
6 [报告]
发表于 2007-06-13 17:23 |只看该作者
缓冲区溢出攻击,如果没控制好,也是一样可能出现段错误吧?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2007-06-13 19:15 |只看该作者
原帖由 tena 于 2007-6-13 16:06 发表


---------------------------------------------------------

还是这位老兄说的最直白,最地道。

ps:比较不喜欢这里某些人回答问题不地道,像卖弄一样

同样也不喜欢这里某些人问问题不地道,像故意不把问题说清楚一样。

论坛徽章:
0
8 [报告]
发表于 2007-06-13 19:58 |只看该作者
就是个信号,通常是在写了不该写的地方。

怎么没发现内存不足会有这个问题

论坛徽章:
0
9 [报告]
发表于 2007-06-13 19:59 |只看该作者
当地址空间分配给一个进程之后,接下来的访问会导致实际物理地址的分配,但是这个时候才会发现内存不足,那么,现在要做的不是发送信号(这个是我猜的),而是直接找些进程来KILL了。

论坛徽章:
0
10 [报告]
发表于 2007-06-13 21:48 |只看该作者
原帖由 flw2 于 2007-6-13 19:59 发表
当地址空间分配给一个进程之后,接下来的访问会导致实际物理地址的分配,但是这个时候才会发现内存不足,那么,现在要做的不是发送信号(这个是我猜的),而是直接找些进程来KILL了。

是的,内存不足不会引起段错误。段错误通常出现在访问了非法的地址后,非法地址分为3类:
1. 访问的地址没有对应的物理内存。这类错误主要出现在越界访问,例如栈越界。比如说当前进程的栈只有5个页和它对应,共20k大小(x86平台),你访问的地址超过了这个范围,就会发生segmentation fault。

2.对地址的操作与该地址的属性不符合。例如该地址对应的内存是只读的,如文本段,你却试图进行写操作。

3.低权限访问高权限地址。这类情况发生在用户进程试图访问内核空间。例如x86中,TASK_SIZE以上的地址为内核空间,当用户态进程试图访问这些地址时,segmentation fault。

需要特别指出的是,并非所有的栈越界都会产生segmentation fault。我个人对linux进程栈的初始分配策略还不太清楚,例如写一个函数,实际栈只需要几百个字节,但在x86上越界访问80k的地址也不会出错,所以我对一个进程初始栈大小是多少还比较迷惑。有清楚的朋友不妨讲解一下。

当内存不足时,kernel会首先调用free_more_page()函数释放一些页,例如page cache、slub,如果仍然不够,杀掉进程。还是不够,就启动臭名昭著的oom_killer了

[ 本帖最后由 zx_wing 于 2007-6-13 21:49 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP