CTF-All-In-One/doc/1.5.7_memory.md
2017-08-10 23:25:09 +08:00

31 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 内存管理
- [什么是内存](#什么是内存)
- [栈与调用约定](#栈与调用约定)
- [堆与内存管理](#堆与内存管理)
## 什么是内存
为了使用户程序在运行时具有一个私有的地址空间、有自己的 CPU就像独占了整个计算机一样现代操作系统提出了虚拟内存的概念。
虚拟内存的主要作用主要为三个:
- 它将内存看做一个存储在磁盘上的地址空间的高速缓存,在内存中只保存活动区域,并根据需要在磁盘和内存之间来回传送数据。
- 它为每个进程提供了一致的地址空间。
- 它保护了每个进程的地址空间不被其他进程破坏。
现代操作系统采用虚拟寻址的方式CPU 通过生成一个虚拟地址Virtual Address(VA)来访问内存然后这个虚拟地址通过内存管理单元Memory Management Unit(MMU))转换成物理地址之后被送到存储器。
![](../pic/1.5.7_va.png)
前面我们已经看到可执行文件被映射到了内存中Linux 为每个进程维持了一个单独的虚拟地址空间,包括了 .text、.data、.bss、栈stack、堆heap共享库等内容。
32 位系统有 4GB 的地址空间,其中 0x08048000~0xbfffffff 是用户空间3GB0xc0000000~0xffffffff 是内核空间GB
![](../pic/1.5.7_vm.png)
## 栈与调用约定
## 堆与内存管理