Я просматриваю презентацию от Массачусетского технологического института, где они объясняют различные типы реализации ASLR.
Например, они указывают, что для статического ASLR стек имеет 19-битную энтропию. Насколько я понимаю, это означает, что базовый адрес стека может быть рандомизирован только для того, чтобы принимать 2^19 различных значений.
Я хочу спросить, как рассчитать, что стек имеет 19-битную энтропию?
Изменить:
После проверки в Интернете я нашел некоторые объяснение стека ASLR в Linux. Изучая другой вопрос, код, который, по моему мнению, может иметь значение:
#ifndef STACK_RND_MASK
#define STACK_RND_MASK (0x7ff >> (PAGE_SHIFT - 12)) /* 8MB of VA */
#endif
static unsigned long randomize_stack_top(unsigned long stack_top)
{
unsigned int random_variable = 0;
if ((current->flags & PF_RANDOMIZE) &&
!(current->personality & ADDR_NO_RANDOMIZE)) {
random_variable = get_random_int() & STACK_RND_MASK;
random_variable <<= PAGE_SHIFT;
}
#ifdef CONFIG_STACK_GROWSUP
return PAGE_ALIGN(stack_top) + random_variable;
#else
return PAGE_ALIGN(stack_top) - random_variable;
#endif
}
Я хочу спросить, это правильное место, чтобы рассуждать о моем вопросе?