在Linux中,我已经试过(只是为了好玩)修改process.c内核源代码创建一个具有更多的熵,即特别行栈地址:
sp -= get_random_int() % 8192;
当我改变了太多,内核停止或我得到一些看似不确定的行为。 我猜,这会导致PAGE_ALIGN()以某种方式失败? 我不是为什么PAGE_ALIGN(),特别是失败,或者正是一块在失败的内核代码(尽管这也将是不错的知道)有兴趣; 我更感兴趣的是,为什么堆栈必须在所有居住在一个特定区域。 什么是建筑的原因和动机背后? 这是否有东西做GDT / LDT如何在保护模式?
只是为了清楚我在问什么:
为什么堆栈必须有形式0xbfXXXXXX(32位)? 为什么不能栈是如0xaaXXXXXX,或任何其他值?