티스토리 뷰
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 |
댓글