-
malloc - do_check_free_chunk()Hack/Pwnable 2016. 12. 1. 04:13
do_check_free_chunk는 해당 청크가 free되있는지를 판단한다.
전 글에서 설명한 do_check_chunk로, av와 p를 검사하는데, av는 malloc_state 구조체이다.
만약 해당 청크의 prev_inuse가 1이라면 Abort를 띄우고, 맵핑되어있다면 Abort를 띄운다. 이 함수는 free되어있는지 체크하는 함수이기때문에 당연히 이래야함!
만약에 청크의 size가 MINSIZE보다 크면 첫번쨰 분기문을 타게되는데, 엄청나게 많은것을 따진다.
간단하게말하면, 다음청크의 prev_size가 현재 청크의 size인지 비교하고, 아니면 Abort를 띄운다.
그리고 prev_inuse가 0인지 1인지를 비교하고 0이면 Abort를 띄운다.
제일 중요한건 Unlink와 비슷한게 있는데, 두개의 코드이다.
assert(p->fd->bk == p);
assert(p->bk->fd == p);
unlink와 유사하다. 해당 청크포인터가 아니면 Abort를 띄운다. 여기서도 검증을 하는듯
처음에 분기문을 타지않으면 청크의 사이즈가 SIZE_SZ가 아니면 Abort를 띄우는데, SIZE_SZ는 다음과같이 선언되어있다.
#define SIZE_SZ (sizeof(INTERNAL_SIZE_T))
그냥 8바이트인지 아닌지를 비교하고 아니면 Abort를 띄움
'Hack > Pwnable' 카테고리의 다른 글
malloc large_chunk exploit scenario (2) 2016.12.02 malloc - do_check_inuse_chunk() (0) 2016.12.01 malloc - do_check_chunk() (0) 2016.12.01 malloc - unlink (0) 2016.12.01 malloc chunk2mem (0) 2016.12.01