ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.