티스토리 뷰

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()을 통해 메모리 할당.

 

malloc()함수가 호출되는 과정

 

 

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을 통해 할당된 메모리인 경우 호출 된다.

 

free()함수가 호출 되는 과정

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함