ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • malloc - do_check_chunk()
    Hack/Pwnable 2016. 12. 1. 04:04

    do_check_chunk는 말 그대로 chunk를 check 하는 매크로이다.





    현재 Chunk의 사이즈를 sz 변수에 초기화한다.


    max address는 av의 top과 현재 청크의 top chunk사이즈를 더한값이 max address가 되고,

    min_adress는 max_address 에서 system_mem 즉, 현재 할당된 메모리 양을 뺀다. system_mem은 malloc_state 구조체 멤버로, 현재 할당된 메모리양을 추적하는데 사용된다.



    if 문에서 chunk_is_mmaped로 현재 청크를 인자로 받는데,


    #define chunk_is_mmapped(p) ((p)->size & IS_MMAPPED)


    이렇게 define 되어있는것을 확인 할 수 있고, chunk의 size에서 플래그값인 IS_MMAPED를 확인하는 함수라고 보면된다.


    만약 IS_MMAPED가 0이라면 또다시 현재 청크에서 top청크가 존재하는지 확인하고, contiguous로 청크를 인자로 받는데 아래와 같이 생겼다.


    #define contiguous(M) (((M)->flags & NONCONTIGUOUS_BIT) == 0)



    M flags와 NONCONTIGUOUS_BIT를 & 연산하여, 0인지를 비교하는데 1이 반환될경우 현재 청크가 min_address보다 작을경우 Abort를 띄우고,

    청크 + 청크size가 top chunk보다 작을때 Abort를 띄운다.


    만약 contiguous(av) 에서 0이 반환되면, 사이즈가 MINSIZE보다 작으면 Abort를 듸우고, prev_inuse가 1이 아닐때 Abort를 띄운다.  (청크가 사용중이지않을때)




    뭐 그냥 mmaped가 되있는지 안되있는지를 확인하는 함수이고, 청크가 min_address보다 작은지 max_address보다 큰지를 비교한다.

    간단히 설명하면 청크가 할당됬는지를 확인한다. free가 되어있다면! 다음 글에서 다룬다.

    'Hack > Pwnable' 카테고리의 다른 글

    malloc - do_check_inuse_chunk()  (0) 2016.12.01
    malloc - do_check_free_chunk()  (0) 2016.12.01
    malloc - unlink  (0) 2016.12.01
    malloc chunk2mem  (0) 2016.12.01
    malloc분석  (0) 2016.12.01

    댓글

Designed by Tistory.