内存分布
32 位系统有 4GB 的地址空间,其中 0x08048000 ~ 0xbfffffff 是用户空间(3GB),0xc0000000 ~ 0xffffffff 是内核空间(1GB)。(0x00000000 ~ 0x08048000 有 128M。为什么是0x00000000而不是0x00000000为起始?)
栈
栈帧
栈帧(Stack Frame,也称堆栈帧)是在堆栈中为未运行完的函数分配的内存区域,用于保存调用这些函数所需维护的信息。
在 x86 体系中,寄存器ebp指向堆栈帧的底部,esp指向堆栈帧的顶部。栈由高地址向低地址生长。
在 Linux 环境下,ELF 文件的入口其实是_start而非main()。
堆
- 堆是除了存放栈中东西之外的所有其他内存区域,由动态内存分配器负责维护。
- 堆由低地址向高地址生长(这是由于系统用链表来存储的空闲内存地址,而链表的遍历方向是由低地址向高地址。),是

本文介绍了CTF竞赛中涉及的内存管理知识,包括32位系统内存分布,栈帧的概念以及堆的动态分配。栈由高地址向低地址生长,堆则是不连续的内存区域,由动态内存分配器维护。在Linux环境下,堆管理涉及brk和mmap系统调用,以及glibc的内存分配器。
最低0.47元/天 解锁文章
2309

被折叠的 条评论
为什么被折叠?



