MITのプレゼンテーションで、さまざまな種類の ASLR 実装について説明しています。
たとえば、静的 ASLR の場合、スタックには 19 ビットのエントロピーがあると指摘しています。私の理解では、これは、スタック ベース アドレスをランダム化して 2^19 の異なる値を取ることしかできないことを意味します。
スタックに 19 ビットのエントロピーがあることを計算する方法を知りたいですか?
編集:
オンラインで確認したところ、Linux のスタック ASLR に関する説明が見つかりました。別の質問から学ぶと、関連すると思われるコードは次のとおりです。
#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
}
ここが私の質問の理由を説明する適切な場所であるかどうかを尋ねたいですか?