Linux mmap()熵的ASLR位

Linux mmap()熵的ASLR位,linux,kernel,mmap,Linux,Kernel,Mmap,我正在研究x86系统上mmap()的ASLR随机化。 我在很多地方读到,在用mmap()加载的地址上有16位随机化 但在源代码中我发现: static unsigned long mmap_rnd(void) 02 { 03 unsigned long rnd = 0; 04 05 /* 06 * 8 bits of randomness in 32bit mmaps, 20 address space bits 07

我正在研究x86系统上mmap()的ASLR随机化。 我在很多地方读到,在用mmap()加载的地址上有16位随机化

但在源代码中我发现:

static unsigned long mmap_rnd(void)
02  {
03          unsigned long rnd = 0;
04   
05         /*
06          *  8 bits of randomness in 32bit mmaps, 20 address space bits
07          * 28 bits of randomness in 64bit mmaps, 40 address space bits
08          */
09          if (current->flags & PF_RANDOMIZE) {
10                  if (mmap_is_ia32())
11                          rnd = (long)get_random_int() % (1<<8);
12                  else 
13                          rnd = (long)(get_random_int() % (1<<28));
14          }
15          return rnd << PAGE_SHIFT;
16  }
static unsigned long mmap\r\d(void)
02  {
03无符号长rnd=0;
04
05         /*
32位MMAP中的06*8位随机性,20个地址空间位
64位MMAP中的07*28位随机性,40个地址空间位
08          */
09如果(当前->标志和PF_随机化){
10如果(mmap_是_ia32())

11 rnd=(长)get_random_int()%(1
PAGE_SHIFT
将随机性转移到不同的位位置。您的
mmap
地址之间的差异实际上是:

 b774b000
-b76e2000
---------
    69000

我不知道
PAGE\u SHIFT
的值是多少,但是如果它是12,那么你就有
0x69
的差异,它完全适合8位。

PAGE\u SHIFT
将随机性转移到不同的位位置。你的
mmap
地址之间的差异确实是:

 b774b000
-b76e2000
---------
    69000

我不知道
PAGE\u SHIFT
的值是多少,但如果它是12,那么你就有
0x69
差异,它完全适合8位。

好的,就差异而言,它是正确的,但是如果你有mmap区域的地址,你就必须处理16位以上的内容……你能在发布之前验证你的拼写吗?我有理解你有点困难。我假设
guest
是一个打字错误,但是你想猜测mmap区域的地址吗?你为什么要这么做?如果地址超过16位,问题是什么?事实上,为什么在32位机器上是16位?是的,我是指猜测。这是一项关于堆栈溢出爆炸的研究它的作用是,您必须知道libc上system()函数的地址,因此如果该地址类似于:0xb77XX000(XX是因为ASLR),没关系,一次暴力攻击需要2^16次尝试。好吧,就区别而言,这是真的,但如果你有mmap区域的地址,你必须处理超过16位的内容…你能在发帖前验证你的拼写吗?我很难理解你。我假设
guest
是一个打字错误,但你是不是想使用mmap区域的地址?为什么要这样做?如果该地址超过16位,问题是什么?事实上,为什么在32位机器上会是16位?是的,我的意思是猜测。这是对堆栈溢出漏洞的研究,你必须知道system()的地址函数,因此如果地址类似于:0xb77XX000(XX是因为ASLR),则可以,对蛮力攻击需要2^16次尝试。