次のようにASLRが有効になっているかどうかを確認しましたが、有効だと思います:
[user@localhost test]$ cat /proc/sys/kernel/randomize_va_space
2
次のプログラムでテストしてみました。
test.c :
#include <stdio.h>
int main(void)
{
printf("%p\n", main);
return 1;
}
ASLR がアクティブな場合、実行ごとに異なるアドレスになると予想していましたよね? しかし、私は毎回同じことをしました。64 ビットと 32 ビットの実行可能ファイルの両方をテストしました。これをテストするために 64 ビットの Arch Linux システムを使用しています。
[user@localhost test]$ gcc test.c -o test
[user@localhost test]$ ./test
0x4004c6
[user@localhost test]$ ./test
0x4004c6
[user@localhost test]$ ./test
0x4004c6
[user@localhost test]$ ./test
0x4004c6
[user@localhost test]$ gcc -m32 test.c -o test
[user@localhost test]$ ./test
0x80483eb
[user@localhost test]$ ./test
0x80483eb
[user@localhost test]$ ./test
0x80483eb
[user@localhost test]$ ./test
0x80483eb
ご覧のとおり、アドレスはすべての実行で同じです。これは、ASLR がオフになっているということではありませんか?