ptmalloc
-
glibc - ptmalloc (1)Heap exploitation/malloc 2020. 3. 1. 16:15
malloc()은 사용자가 프로그램 실행시 동적으로 메모리를 할당받을 수 있게 해주는 함수이다. 이는 내부적으로 sbrk()를 사용해 커널로부터 힙 영역을 할당받는데, sbrk()는 커널모드로 들어가기 때문에 단순히 요청한 크기만큼 sbrk()를 해주면 큰 부하가 걸린다. 이를 해결하기 위해 glibc는 ptmalloc을 사용하여 힙 영역을 관리한다. Arena arena란 힙 영역을 관리하는 구조체로, ptmalloc에서는 쓰레드별로 관리하여 main arena, thread arena가 존재한다. 단일 쓰레딩 환경에서는 main_arena만 존재한다. arena의 구조체는 아래와 같다. struct malloc_state { /* Serialize access. */ mutex_t mutex; /* ..