问个关于powerpc的问题

发布于 2022-09-26 13:02:23 字数 94 浏览 21 评论 0

关于堆栈powerpc是怎么处理的?r1寄存器指向栈顶(类似以前的esp)?还是栈底?
以前的x86有两个寄存器,esp,ebp,ppc只用一个寄存器是怎么实现定位堆栈位置的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

风铃鹿 2022-10-03 13:02:23

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

↙温凉少女 2022-10-03 13:02:23

原帖由 grayblaze 于 2007-10-25 16:01 发表
关于堆栈powerpc是怎么处理的?r1寄存器指向栈顶(类似以前的esp)?还是栈底?
以前的x86有两个寄存器,esp,ebp,ppc只用一个寄存器是怎么实现定位堆栈位置的?

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

梦忆晨望 2022-10-03 13:02:23

如果不保存栈底的指针,那不是很容易溢出,因为sp指针跑到栈底指针以后,cpu都不知道。。。

山色无中 2022-10-03 13:02:23

原帖由 grayblaze 于 2007-10-30 22:08 发表
如果不保存栈底的指针,那不是很容易溢出,因为sp指针跑到栈底指针以后,cpu都不知道。。。

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

不离久伴 2022-10-03 13:02:23


多谢,以后还请两位大侠多多指教。。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文