我现在正在读Robert Love的“Linux Kernel Development”,我不明白这个汇编到底在做什么。
基本上,在每个进程内核堆栈中,都有一个struct thread_info驻留在堆栈的末尾。现在,在x86架构上,我们显然可以通过使用以下程序集来获取它(假设堆栈大小为8KB )
movl $-8192, %eax
andl %esp, %eax所以基本上将堆栈指针ANDing为0xffffe000。我不明白这到底是怎么回事?我不明白为什么屏蔽%esp中最不重要的13位会把我们带到结构。我知道,一旦解释清楚了,我会觉得自己很愚蠢,但这让我很困扰。
谢谢。
发布于 2010-11-29 00:05:00
堆栈向下增长,因此堆栈的末尾是堆栈中最低的地址,也是结构的起始地址。堆栈以8KB的倍数存储。因此,擦除13个最低有效位得到堆栈的最低地址,从而得到结构的开始。这有意义吗?
https://stackoverflow.com/questions/4297624
复制相似问题