免费注册 查看新帖 |

Chinaunix

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

共享内存写越界时写的是哪个空间? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-26 08:48 |只看该作者 |倒序浏览
是进程自己的那部分物理空间,还是内核分给共享内存的那部分物理空间?
创建一个4096字节的共享内存,写5000字节进去,也没报任何错误。不段错误?
用的sysv共享内存。

论坛徽章:
324
射手座
日期: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
2 [报告]
发表于 2010-11-26 09:31 |只看该作者
写的应该都是自己进程的内存空间

论坛徽章:
0
3 [报告]
发表于 2010-11-26 09:48 |只看该作者
进程一般写的都是自己的空间

论坛徽章:
0
4 [报告]
发表于 2010-11-26 13:15 |只看该作者
我咋觉得内存越界应该是写的别人的地址空间。
要是自己的地址空间,随便写(除了只读的段/代码段),也没啥保护机制,最多写花内存,或者执行指令时报错。
要是写别人的内存空间,触发操作系统写保护机制,导致segment fault。另外写花内存,可间接导致malloc/free写别人的地址空间。

论坛徽章:
0
5 [报告]
发表于 2010-11-26 13:41 |只看该作者
比如说有一块共享内存100个字节,那么shmat过来后,得到一个指针p,从这个指针偏移0-100字节处,自然就是共享内存的空间。那么101字节呢?
以下几种情况哪种有可能?
1. 共享内存分配最小为1页?所以虽然申请100字节,但系统分配了4096字节?
2. 不确定p+101指向哪里,在整个系统内随机?
3. 不管p+101指向哪里,都是指向系统分配给本进程的空间?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
6 [报告]
发表于 2010-11-26 13:44 |只看该作者
本帖最后由 cjaizss 于 2010-11-26 13:45 编辑

系统相关,如果越界不引发段错误,写的永远都是自己的空间,否则那是UNIX的BUG了
没有MMU的核移值下,比如uclinux,另当别论

论坛徽章:
0
7 [报告]
发表于 2010-11-26 13:59 |只看该作者
提出这个问题是想了解,当对共享内存的访问越界时,会发生什么。是只对本进程造成问题,还是说有可能改写与它相邻的另外一个共享内存里的数据?
比如说:A进程写共享内存1时越界,而共享内存2物理上与共享内存1相邻,结果A进程篡改了共享内存2中的数据。共享内存2被用作进程B与进程C之间的通信,这下进程B与进程C就死不瞑目了,而且永远也无法知道是进程A干的。

论坛徽章:
0
8 [报告]
发表于 2010-11-26 14:07 |只看该作者
系统相关,如果越界不引发段错误,写的永远都是自己的空间,否则那是UNIX的BUG了
没有MMU的核移值下,比如ucli ...
cjaizss 发表于 2010-11-26 13:44



    一般意义下确实如此,但对共享内存不知道是怎么处理的,会不会有如下情况出现。
共享内存1大小为100字节,共享内存2大小200字节,系统把它们放在同一个页面里。
当进程attach共享内存1时,因为在同一个页面,结果共享内存2也合法的进入了进程的地址空间

论坛徽章:
0
9 [报告]
发表于 2010-11-26 14:24 |只看该作者
linux sysv shm的实现有点类似普通文件,实际上它就是基于一个文件系统的
shm的行为更像是直接mmap一个文件,只是这个文件不在磁盘上

一页之内肯定不会出问题
超过一页内核会自动扩大,就像文件一样(具体多大不太清楚,而且如果你显示的shmat到一个大小有限的洞,能到多大也会受影响)

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2010-11-26 20:43 |只看该作者
提出这个问题是想了解,当对共享内存的访问越界时,会发生什么。是只对本进程造成问题,还是说有可能改写与 ...
linux.sz 发表于 2010-11-26 13:59



    如果你发现不小心通过这种手段操作到了别的进程的数据,那么恭喜你,你发现了一个操作系统的BUG。uclinux这些对于没有MMU的处理器的裁减另当别论
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP