20250616-20250622
20250616-20250622
附件:
【超级会员V5】通过百度网盘分享的文件:20250616-20250622
链接:https://pan.baidu.com/s/1Ji_ww_Nc6y559UgTazQZNA?pwd=padm
提取码:padm
题目复现
[长城杯 2024]anote
学习笔记
一、程序在内存中的分布
程序在内存中的分布: BV1wz4y1D7Gq
记录记录程序在内存中的分布(以4G为例)
低地址3G
128MB的保留区(0-255)
.text代码段:程序代码指令
.rodata只读数据段(常量)
.data初始化数据段(初始化的全局变量)
.bss未初始化数据段(未初始化的全局变量)
heap堆(动态分配的内存)
mmap映射区(提供给用户的虚拟内存空间)
共享数据区
stack栈
高地址1G
kernel内核空间
二、pwn相关
1、常识
glibc内存管理:ptmalloc2
linux内存管理的基本思想:内存延迟分配
2、heap操作相关函数
(1)brk()是系统调用、sbrk()是库函数。C语言的动态内存分配的基本函数是malloc()
在liunx中的实现是:malloc()函数调用库函数sbrk(),sbrk()的实质是调用brk()函数。brk()是一个简单的系统调用,只是简单的改变mm_struct结构体成员变量brkd的值
(2)函数原型:
#include
int brk(void * addr);
void * sbrk(intptr_t increment); //当参数increment为0时,sbrk()返回的是进程当前的brk值,increment为正数时扩展brk值,当increment为负数时收缩brk值