免费注册 查看新帖 |

Chinaunix

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

问个关于powerpc的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-25 16:01 |只看该作者 |倒序浏览
关于堆栈powerpc是怎么处理的?r1寄存器指向栈顶(类似以前的esp)?还是栈底?
以前的x86有两个寄存器,esp,ebp,ppc只用一个寄存器是怎么实现定位堆栈位置的?

论坛徽章:
0
2 [报告]
发表于 2007-10-29 13:59 |只看该作者
PowerPC不熟悉,只能一般地说说。
栈是单端伸缩的表,因此,从原理上说,只要有一个栈顶指针就可以操作堆栈了。X86里的EBP起辅助作用,使栈在函数调用中的应用更方便,更高效。
栈底是固定不变的。你只要存一个数来指示栈底。
对大多数CPU内置的硬件栈来说,栈底都是全1(可寻址空间的最高地址)。当栈空时,你还要做弹出,状态寄存器的溢出位也可以用来指示栈溢出。因此,甚至根本不需要保存栈底。

论坛徽章:
0
3 [报告]
发表于 2007-10-29 15:42 |只看该作者
原帖由 grayblaze 于 2007-10-25 16:01 发表
关于堆栈powerpc是怎么处理的?r1寄存器指向栈顶(类似以前的esp)?还是栈底?
以前的x86有两个寄存器,esp,ebp,ppc只用一个寄存器是怎么实现定位堆栈位置的?

一个栈指针寄存器完全够用了,实际上大部分架构都用一个寄存器。
x86上ebp也不是必须的,你在编译的时候加上-fomit-frame-pointer参数,ebp就不用了,只用esp。这样lz可以看看x86里如何用一个寄存器操作栈的。

论坛徽章:
0
4 [报告]
发表于 2007-10-30 22:08 |只看该作者
如果不保存栈底的指针,那不是很容易溢出,因为sp指针跑到栈底指针以后,cpu都不知道。。。

论坛徽章:
0
5 [报告]
发表于 2007-10-31 19:01 |只看该作者
原帖由 grayblaze 于 2007-10-30 22:08 发表
如果不保存栈底的指针,那不是很容易溢出,因为sp指针跑到栈底指针以后,cpu都不知道。。。

cpu不需要知道,操作系统知道就可以了。溢出后会产生page fault,操作系统只需要在这个时候判断访问的时候是非法地址就可以产生segfault终止程序。
实际上某些cpu也有硬件的检查机制,例如x86段中的limit。

论坛徽章:
0
6 [报告]
发表于 2007-11-01 20:23 |只看该作者

多谢,以后还请两位大侠多多指教。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP