分类: 系统运维
2015-03-07 15:04:18
关闭Linux 内存地址随机化机制, 禁用进程地址空间随机化.可以将进程的mmap的基址,stack和vdso页面地址固定下来. 可以通过设置kernel.randomize_va_space内核参数来设置内存地址随机化的行为.
目前randomize_va_space的值有三种,分别是[0,1,2]
0 - 表示关闭进程地址空间随机化。
1 - 表示将mmap的基址,stack和vdso页面随机化。
2 - 表示在1的基础上增加栈(heap)的随机化。
randomize_va_space默认值是2
cat /proc/sys/kernel/randomize_va_space
要关闭随机内存使用如下命令:
echo 0 > /proc/sys/kernel/randomize_va_space
测试程序:
vim random.c
unsigned long sp(void){ asm("mov %rsp, %rax");}
int main(int argc, char **argv)
{
unsigned long esp = sp();
printf("Stack pointer (ESP : 0x%lx)\n",esp);
return 0;
}
通常直接编译即可:
gcc random.c -o random
但是对于有些系统有栈保护机制:
*** stack smashing detected ***: ./stack0 terminated
使用如下命令即可:
gcc -fno-stack-protector -z execstack random.c -o random
randomize_va_space为2时,上面的代码编译后,打印结果是随机的,
randomize_va_space为0时,打印结果是固定的一个地址。