티스토리 뷰
반응형
이 포스트에서는 우리가 malloc(), free()함수 호출시 어떤 과정을 통해 메모리가 할당, 해제되는지 살펴 볼 것이다.
malloc() 함수 호출
- libc_malloc() → 사용하는 Thread에 맞게 Arena 설정 후, int_malloc()함수 호출.
- int_malloc() → 재사용 가능한 bin을 탐색하여 재할당, 없으면 Top Chunk에서 분리해서 할당.
Top Chunk가 요청한 크기보다 작다면 sysmalloc()함수 호출. - sysmalloc() → 시스템에 메모리를 요청해서 Top Chunk를 확장하고 대체.
혹은 brk()나 mmap()을 통해 메모리 할당.
free() 함수 호출
- libc_free() → mmap으로부터 할당된 메모리일 경우, munmap_chunk()함수를 통해 메모리 해제.
아닌경우, 해제하고자 하는 chunk가 속한 Arena의 포인터를 획득 후 int_free()함수 호출. - int_free() → chunk를 해제한 후, 크기에 맞는 bin을 찾아 저장하고 Top Chunk와 병합할 수 있다면 병합.
- systrim() or heap_trim() or munmap_chunk()
→ systrim()함수는 Top Chunk와 병합 후 Top Chunk가 Arena의 크기를 넘어선 경우 호출 된다.
→ heap_trim()함수는 메모리 해제 후 별 문제가 없다면 호출 된다.
→ munmap_chunk()함수는 위에서 말했듯이 mmap을 통해 할당된 메모리인 경우 호출 된다.
반응형
'Pwnable > Heap' 카테고리의 다른 글
[Heap Exploit] Fastbin_dup Consolidate (0) | 2019.05.22 |
---|---|
[Heap Exploit] Fastbin_dup (Feat. how2heap) (0) | 2019.05.22 |
[Heap] malloc.c 분석(4) - malloc() (0) | 2019.05.06 |
[Heap] malloc.c 분석(3) - unlink_chunk() (0) | 2019.05.05 |
[Heap] malloc.c 분석(2) - struct & etc (0) | 2019.05.05 |