为什么堆栈必须是页对齐?(Why does the stack have to be page al

2019-09-21 04:59发布

在Linux中,我已经试过(只是为了好玩)修改process.c内核源代码创建一个具有更多的熵,即特别行栈地址:

sp -= get_random_int() % 8192;

当我改变了太多,内核停止或我得到一些看似不确定的行为。 我猜,这会导致PAGE_ALIGN()以某种方式失败? 我不是为什么PAGE_ALIGN(),特别是失败,或者正是一块在失败的内核代码(尽管这也将是不错的知道)有兴趣; 我更感兴趣的是,为什么堆栈必须在所有居住在一个特定区域。 什么是建筑的原因和动机背后? 这是否有东西做GDT / LDT如何在保护模式?

只是为了清楚我在问什么:

为什么堆栈必须有形式0xbfXXXXXX(32位)? 为什么不能栈是如0xaaXXXXXX,或任何其他值?

Answer 1:

有一个极限do_page_fault()到什么程度,你可以认为它是一个糟糕的访问之前堆栈VMA外,或许你打的是什么?



文章来源: Why does the stack have to be page aligned?