Pwnable/Heap
[Heap] malloc.c 분석(1)
ch4njun
2019. 5. 4. 20:50
반응형
이 포스트에서는 우리가 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을 통해 할당된 메모리인 경우 호출 된다.
반응형