Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76112
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-11 17:52
个人简介

黑夜给了我黑色的眼睛我却用它来寻找光明。

文章分类

全部博文(21)

文章存档

2015年(21)

我的朋友

分类: 系统运维

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时,打印结果是固定的一个地址。

阅读(1926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~