web-dev-qa-db-ja.com

Ubuntu16.04でASLRを理解しようとしています

ここで何か変わったことはありますか? randomize_va_spaceを設定したかどうかに関係なく、スタックのオフセットは常に0になります。Afaikは乱数である必要がありますよね?

....                        
f7fd8000-f7fd9000 r-xp 00000000 00:00 0                                  [vdso]
f7fd9000-f7ffb000 r-xp 00000000 08:05 922294                             /lib/i386-linux-gnu/ld-2.23.so
f7ffb000-f7ffc000 rw-p 00000000 00:00 0 
f7ffc000-f7ffd000 r--p 00022000 08:05 922294                             /lib/i386-linux-gnu/ld-2.23.so
f7ffd000-f7ffe000 rw-p 00023000 08:05 922294                             /lib/i386-linux-gnu/ld-2.23.so
fffdd000-ffffe000 rw-p 00000000 00:00 0                                  [stack]

その他の場合、スタックは次のように低い位置にあります。

...
7ffc2c7f6000-7ffc2c7f8000 r--p 00000000 00:00 0                          [vvar]
7ffc2c7f8000-7ffc2c7fa000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

しかし、この場合でもオフセットは0です!何が足りないのですか?

1
AdHominem

開始アドレスと終了アドレスfffdd000-ffffe000は、ASLRを有効にして実行するたびに変更する必要があるものです。プログラムを実行するたびに、ここに異なるアドレスが表示されます。 00000000は、この領域がマップされたファイル内のオフセットです(ASLRの影響を受けません)-ファイルからマップされていない場合は、常に 0です。

1
rhodeo