#define FASTBIN_CONSOLIDATION_THRESHOLD (65536UL)
if ((unsigned long)(size) >= FASTBIN_CONSOLIDATION_THRESHOLD) {
if (have_fastchunks(av))
malloc_consolidate(av);
이 부분은 fastbin 크기 이상의 청크를 free && 인접한 청크를 병합 한 뒤 실행 된다.
그래서 top chunk와 인접한 fastbin 크기 이상의 청크를 free하면 실행이 되게 된다.
malloc_consolidate가 실행되면 fastbin에 있는 청크를 unsorted bin으로 옮기게 된다. 하지만 이 과정에서 인접한 청크가 free되어있으면 병합하기 때문에 조심해야한다.
이것을 통해 fastbin 청크를 unsorted bin으로 보냄&&unsorted bin 청크 수정이 가능하므로,
unsafe unlink, unsorted bin attack 등을 할 수 있다.
간단한 예제 코드
이런 식으로 unsorted bin에 있는 청크를 할당받았고, bk에 main_arena + 88의 주소가 있는 것을 알 수 있다.
'힙(heap)' 카테고리의 다른 글
malloc_hook 덮어서 free시에 쉘 따기 (0) | 2019.08.29 |
---|