티스토리 뷰

System/Linux

Heap chunk 정리

Tribal 2016. 4. 14. 15:33

Heap Chunk Struct

1
2
3
4
5
6
7
8
9
10
11
struct malloc_chunk 
{  
    INTERNAL_SIZE_T      prev_size;  /* Size of previous chunk (if free).  */  
    INTERNAL_SIZE_T      size;       /* Size in bytes, including overhead. */  
 
    struct malloc_chunk* fd;         /* double links -- used only if free. */  
    struct malloc_chunk* bk;          /* Only used for large blocks: pointer to next larger size.  */  
 
    struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */  
    struct malloc_chunk* bk_nextsize;
};
cs


Heap Struct

위의 그림에서 보는 것과 같이 size에는 chunk의 크기 이외에도 특수한 3개의 비트가 있다.

  • N : 멀티스레드 프로그램의 경우 각 스레드마다 다른 heap 영역을 사용할 수 있기 때문에 현재 chunk가 main heap에 속하는지 여부를 나타냄(NON_MAIN_ARENA)
  • M : 해당 필드가 mmap() 시스템 콜을 통해 할당된 것인지 나타냄, Size가 128KB 이상일 경우(IS_MMAPPED)
  • P : 이전 chunk가 사용 중인지의 여부를 나타냄(PREV_INUSE)


모든 chunk의 맨 마지막에는 top chunk가 존재하는데 top chunk는 어떠한 bin에도 속하지 않으며 heap 영역의 마지막에 항상 위치한다. 일반 free chunk에서 메모리 할당 요청을 만족하지 못 할 경우 이 top chunk를 분할하여 처리하는데, 이것조차 불가능한 경우 heap 영역을 할당하여 처리하게 된다.


bin의 종류

  • fast bin : 단일 연결리스트, chunk size < 64 byte, LIFO 방식

  • small bin : 환형 이중 연결리스트, chunk size < 512 byte, FIFO 방식

  • large bin : 환형 이중 연결리스트(sorted list), chunk size >= 512

  • unsorted bin : 환형 이중 연결리스트


참고 자료

  • http://studyfoss.egloos.com/5206220
  • http://smleenull.tistory.com/586
  • http://www.slideshare.net/AngelBoy1/heap-exploitation-51891400


'System > Linux' 카테고리의 다른 글

Position Independent Executables(PIE) 번역  (0) 2016.06.17
Memory Leak으로 얻은 주소로 offset 알아내기  (0) 2016.05.01
Linux Remote Shellcode  (0) 2016.01.30
SROP 정리  (0) 2016.01.11
ropgadget find  (0) 2016.01.06
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   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