Profile

youngsouk

youngsouk

malloc_consolidation_without_large_bin

#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