Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1026971
  • 博文数量: 136
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1800
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
个人简介

90后空巢老码农

文章分类

全部博文(136)

文章存档

2020年(34)

2019年(54)

2018年(47)

2017年(1)

我的朋友

分类: IT业界

2020-06-05 19:30:39

1. 栈随机化:在栈的起始位置,空置随机大小的空间,程序不使用这段空间(0~n字节),但是它会导致程序每次执行时,后续栈帧的位置发生变化。n必须足够大,来防止被破解,但又必须足够小,不至于浪费空间

2. 栈破坏检测:在栈帧中任何局部缓冲区与栈状态之间存储一个特殊的值,是在程序每次运行时随机产生的。在恢复寄存器状态和从函数返回之前,程序检查这个值是否被更改,如果更改,则异常终止

3. 限制可执行代码区域:限制哪些内存区域能够存放可执行代码。比如三种典型的控制访问形式:读、写、和执行


可变长栈帧的管理:当需要在栈上动态分配存储空间的时候,就要用到rbp了,这样的函数汇编之后的结果常常为:

点击(此处)折叠或打开

  1. pushq %rbp/*保存rbp原来的值*/
  2. mov %rsp, %rbp /*保存当前函数的栈的基地址*/
  3. ...
  4. leave /*等同于
  5. mov %rbp, %rsp
  6. pop %rbp*/
  7. ret

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