免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3449 | 回复: 6

[C] 段错误的理解 [复制链接]

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2013-12-27 20:34 |显示全部楼层
突然由坛子里的段错误想到的.

由于内核在装载a.out时会记录进程虚拟地址和文件的"映射关系"(估且这么称呼吧)
在程序执行过程中发生page错误也没关系,内核能正确加载进来.

对于段错误,是不是可以理解为访问地址在内核中也没有任何记录.所以才会发生段错误?
突然想到这么一个问题:
glibc库函数 malloc会向内存申请空间,这个申请的过程是否可以简化为内核记录一笔:为某个空间分配映射关系.
那么由于库函数实际申请的空间大于用户程序申请的空间,是否存在如下可能:

p = malloc( 100)

//假设 p返回地址为 1

由于背后库函数实际申请了1000空间.
那么用户故意越界访问 p+101也不会产生段错误,但用户故意访问 p+1001就会发生段错误?

实际运行过程中不知道库函数背后申请了多少,所以用户"故意"访问一些越界的地址,有可能产生段错误,有可能不产生

以上纯是我的假设,没有进行任何验证,如有错误请见谅

论坛徽章:
315
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2013-12-27 20:42 |显示全部楼层
就是这样的

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2013-12-27 21:13 |显示全部楼层
hellioncu 发表于 2013-12-27 20:42
就是这样的


其实我更想确认我的假设.即malloc提高了进程的program break(通过brk),但用户故意越界的话,是否存在两种可能,一种产生段错误,一种不产生.

论坛徽章:
315
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2013-12-27 22:00 |显示全部楼层
seufy88 发表于 2013-12-27 21:13
其实我更想确认我的假设.即malloc提高了进程的program break(通过brk),但用户故意越界的话,是否存在两种 ...


似乎严格来说,操作系统以页为单位管理内存,应该是访问未分配的页才会产生段错误

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
发表于 2013-12-27 22:16 |显示全部楼层
回复 4# hellioncu


    你可以把 p 当成 page 数,不影响我的假设。

论坛徽章:
5
寅虎
日期:2014-01-01 12:56:09未羊
日期:2014-01-02 17:57:59未羊
日期:2014-01-05 10:18:05双子座
日期:2014-01-05 13:04:07双鱼座
日期:2014-01-10 17:40:33
发表于 2013-12-27 22:21 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2013-12-29 13:02 |显示全部楼层
malloc也不一定是brk,如果是大块内存,会用匿名mmap
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP