首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux内核开发

linux内核开发
EN

Stack Overflow用户
提问于 2010-11-28 23:58:07
回答 1查看 908关注 0票数 9

我现在正在读Robert Love的“Linux Kernel Development”,我不明白这个汇编到底在做什么。

基本上,在每个进程内核堆栈中,都有一个struct thread_info驻留在堆栈的末尾。现在,在x86架构上,我们显然可以通过使用以下程序集来获取它(假设堆栈大小为8KB )

代码语言:javascript
复制
movl $-8192, %eax
andl %esp, %eax

所以基本上将堆栈指针ANDing为0xffffe000。我不明白这到底是怎么回事?我不明白为什么屏蔽%esp中最不重要的13位会把我们带到结构。我知道,一旦解释清楚了,我会觉得自己很愚蠢,但这让我很困扰。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-29 00:05:00

堆栈向下增长,因此堆栈的末尾是堆栈中最低的地址,也是结构的起始地址。堆栈以8KB的倍数存储。因此,擦除13个最低有效位得到堆栈的最低地址,从而得到结构的开始。这有意义吗?

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4297624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档