В Linux се опитах (само за забавление) да модифицирам източника на ядрото в process.c, за да създам адрес на стека, който има повече ентропия, т.е. по-специално реда:
sp -= get_random_int() % 8192;
Когато променя това твърде много, ядрото спира или получавам някакво привидно недефинирано поведение. Предполагам, че това кара PAGE_ALIGN() да се провали по някакъв начин? Не съм толкова заинтересован защо PAGE_ALIGN() в частност се проваля или точно коя част от кода в ядрото се проваля (въпреки че и това би било хубаво да се знае); Повече ме интересува защо стекът изобщо трябва да се намира в определен регион. Каква е архитектурната причина и мотивация зад това? Това има ли нещо общо с това как GDT/LDT работи в защитен режим?
Само за да стане ясно какво питам:
Защо стекът трябва да има формата 0xbfXXXXXX (на 32-битов)? Защо стекът не може да бъде напр. 0xaaXXXXXX или друга стойност?