0x01 内存的不同用途
缓冲区溢出(buffer overflow),在电脑学上是指针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。
缓冲区溢出原指当某个数据超过了处理程序回传堆栈地址限制的范围时,程序出现的异常操作。造成此现象的原因有:
- 存在缺陷的程序设计
- 尤其是C语言,不像其他一些高级语言会自动进行数组或者指针的堆栈区块边界检查,增加溢出风险。
- C语言中的C标准库还具有一些非常危险的操作函数,使用不当也为溢出创造条件。
进程使用的内存按照功能大致分成以下 4 个部分:
- 代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指令并执行。
- 数据区:用于存储全局变量等。
- 堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配内存和回收内存是堆区的特点。
- 栈区:用于动态地存储函数之间的调用关系,以保证被调用函数在返回时恢复到母函数中继续执行。
- CPU是完成工作的工人。
- 数据区、堆区、栈区等则是用来存放原料、半成品、成品等各种东西的场所。
- 存在代码区的指令则告诉CPU要做什么,怎么做,到哪里去领原材料,用什么工具来做,做完以后把成品放到哪个货舱去。
- 值得