Linux操作系统
_Nigel_
I code, not for me, but the world.
展开
-
glibc2.23-glibc2.29的malloc.c的变化
在pwn堆利用中 往往需要根据glibc的版本对exp进行一个改进本人根据自身的需要对glibc2.23-glibc2.29在malloc.c在堆分配和回收策略上的变化进行一个记录最主要的是记录报错信息Glibc2.23_int_malloc从fastbin中分配fast chunk的时候malloc的时候 会对fastbin->fd指向的chunk 验证一遍它是否在对应的fas...原创 2019-10-17 09:26:18 · 1490 阅读 · 0 评论 -
glibc Tcache机制
Tcache的简述在Glibc的2.26中 新增了Tcache机制 这是ptmalloc2的缓存机制Tcache在glibc中是默认开启的,在Tcache被开启的时候会定义如下东西#if USE_TCACHE/* We want 64 entries. This is an arbitrary limit, which tunables can reduce. */# define ...原创 2019-10-15 19:24:09 · 3187 阅读 · 0 评论 -
堆学习---1 宏观观察
动态内存的分配和释放最重要的就是malloc 和 free 这两个函数 一个是用于向操作系统索取动态的内存空间 一个是用于释放之前通过malloc或者relloc函数分配的空间。其内部通过brk,sbrk和mmap实现对内存的索取。举个例子 当malloc(1024)的时候 即我们只需要1024Bytes,但是进程会向操作系统先批发一块大的内存块,又因为是主线程所以称为main arena 它是...原创 2019-09-18 09:24:30 · 227 阅读 · 0 评论 -
堆基础----2 开始入微数据结构
有三个极其重要的堆数据结构是用于堆的管理heap_info(Heap Header的存在) 线程即thread arena可能有多个堆,虽然起初每个arena只有一个堆段,但是随着malloc等函数消耗完堆空间后,新的堆会通过mmap到这个arena中,即受这个arena的管辖!!!,此时这就会有个新的堆段,一个堆段有一个heap_info的数据结构!!! main arena只有一个heap...原创 2019-09-18 09:25:40 · 438 阅读 · 0 评论 -
堆基础---3 深入malloc的具体实现
heap_info 通过循环链表串接/* A heap is a single contiguous memory region holding (coalesceable) malloc_chunks. It is allocated with mmap() and always starts at an address aligned to HEAP_MAX_SIZE. */...原创 2019-09-26 21:16:09 · 470 阅读 · 0 评论 -
堆基础---4 对malloc的总结
malloc的流程分析首先我们要知道_libc_malloc的别名是malloc 所以malloc是从_libc_malloc函数开始的。在一开始会读取一个__malloc_hook的指针 这里一开始进程初始化的时候是填充为malloc_hook_ini所以会hook该_libc_malloc函数 然后会最先调用该hook首先将全局的_malloc_hook填充为null 因为初始化只需要...原创 2019-09-26 21:16:40 · 505 阅读 · 0 评论 -
堆基础---6 深入理解free()函数
_libc_freefree函数在glibc中的真实名是 _libc_free()。void __libc_free(void *mem) { mstate ar_ptr; mchunkptr p; void (*hook)(void *, const void *) = atomic_forced_read (__free_hook); if (__built...原创 2019-09-26 21:20:24 · 1095 阅读 · 0 评论 -
常见堆攻击手段
fastbin利用smallbin利用unsortedbin利用largebin利用原创 2019-10-10 09:20:07 · 1521 阅读 · 1 评论