免费注册 查看新帖 |

Chinaunix

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

[内核入门] 小白问题:关于内核栈的起始位置 [复制链接]

论坛徽章:
0
发表于 2015-09-19 02:31 |显示全部楼层
问题很小白,求轻喷。。我们都知道内核栈的起始地址为:
task_struct = (struct task_struct *) STACK_POINTER & 0xffffe000;
stack_pointer不是栈顶指针吗?栈顶指针是移动的,就是会变化的,那task_struct岂不是也会跟着变吗?

论坛徽章:
4
丑牛
日期:2014-01-11 15:11:12亥猪
日期:2014-12-15 22:19:092015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-03-13 19:45:11
发表于 2015-09-19 11:36 |显示全部楼层
task_struct的空间加上栈的空间也就4K,上面的代码明显是4K对齐嘛

论坛徽章:
0
发表于 2015-09-19 16:28 |显示全部楼层
回复 2# 魔鬼的惊叹


    小弟新手愚笨 还望详述

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-08-19 06:20:002015亚冠之本尤德科
日期:2015-08-31 23:24:47
发表于 2015-09-20 14:38 |显示全部楼层
你看的是哪一版的代码?什么平台?
我貌似从来没有见过这样用

论坛徽章:
0
发表于 2015-09-20 15:02 |显示全部楼层
回复 4# 夕阳下的孤影
  1. task_struct = (struct task_struct *) STACK_POINTER & 0xffffe000;
复制代码
This is exactly how the above pseudo-code is implemented in C under Linux:
  1. /* cut-and-pasted from
  2. linux/include/asm-i386/current.h */
  3. static inline struct task_struct * get_current(void)
  4. {
  5.         struct task_struct *current;
  6.         __asm__(-andl %%esp,%0;
  7.         -:-=- (current) : "0" (~8191UL));
  8.         return current;
  9.         }
复制代码

论坛徽章:
0
发表于 2015-09-20 15:40 |显示全部楼层
回去好好看书, 很明显, 后面8K有效, task和内核stack共用一个8K页面, 所有在kenel中调用函数过深就会溢出覆盖task

论坛徽章:
3
金牛座
日期:2013-10-12 15:42:452015年辞旧岁徽章
日期:2015-03-03 16:54:15IT运维版块每日发帖之星
日期:2016-06-01 06:20:00
发表于 2015-09-20 17:22 |显示全部楼层
看什么书
回复 6# tpopusher


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2015-09-21 11:20 |显示全部楼层
栈顶是随时在变,但是有约束,必须在内核栈(2K或4K)的范围内。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP