4
在Linux中,我已经试过(只是为了好玩)修改process.c内核源代码创建一个具有更多的熵,即在特定的行栈地址:为什么堆栈必须进行页面对齐?
sp -= get_random_int() % 8192;
当我改变这个太内核停顿了很多,或者我看到一些看似未定义的行为。我猜这会导致PAGE_ALIGN()以某种方式失败?我并不关心为什么PAGE_ALIGN()特别失败,或者说内核中哪些代码失败(尽管知道这一点很好)。我更感兴趣的是为什么堆栈必须驻留在特定区域。这背后的架构原因和动机是什么?这与GDT/LDT如何在保护模式下工作有关吗?
只是为了清楚我要问:
为什么堆栈必须有形式0xbfXXXXXX(32位)?为什么堆栈不能被0xaaXXXXXX或其他值?
在x86上,8K是* kernel *堆栈的默认大小。代码OP提及影响*用户*堆栈,其大小不固定。 – 2012-10-07 19:08:57