ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BlackHat Heap] Chunks of memory
    Hack/Pwnable 2016. 11. 29. 22:37

    Chunk 메모리는 malloc_chunk , mchunkptr 구조체로 구성되어있다.


    1
    2
    3
    4
    5
    6
    7
    struct malloc_chunk {
     
        INTERNAL_SIZE_T prev_size;
        INTERNAL_SIZE_T size;
        struct malloc_chunk* fd;
        struct malloc_chunk* bk;
    }
    cs


    INTERNAL_SIZE_T prev_size : 현재 청크의 기준에서 이전의 청크의 사이즈를 나타낸다. 이전 청크가 사용가능하지않은 경우에만 사용된다. (free)


    INTERNAL_SIZE_T size : 현재 청크의 크기를 나타낸다. 


    struct malloc_chunk *fd : 청크가 free된 경우, 다음 청크를 가리키는 포인터이다. double linked list로 관리된다.


    struct malloc_chunk *bk : 청크가 free된 경우, 이전 청크를 가리키는 포인터이다. double linked list로 관리된다.



    위의 구조체는 주어진 메모리 청크에대한 정확한 정보를 제공한다.


    할당된 청크의 모습은 다음과같다. 




    chunk 포인터는 ptmalloc 루틴에 내부적으로 표시되는 주어친 청크의 시작을 나타낸다.


    그 포인터에는 이전청크의 크기와 현재 청크의 크기, 그리고 3비트의 플래그가 존재하는데, 현재청크가 아닌 main_arena에 있는지 확인하기위해  메타데이터로 사용된다.



    다음은 free된 메모리청크를 나타낸다. 똑같은 구조체를 사용하지만 조금 다르다.





    해당 청크에서 P는 이전청크가 사용중인지 여부를 나타낸다. 크기 멤버다음에는 마지막으로 다음 청크의대한 포인터와 이전 사용가능한 청크에 대한 포인터가 존재한다.








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

    [BlackHat Heap] Allocate a block  (0) 2016.11.30
    [BlackHat Heap] Binning  (0) 2016.11.29
    [BlackHat Heap] malloc_state structure  (0) 2016.11.29
    [BlackHat Heap] heap_info structure  (0) 2016.11.29
    Allocate Heap with fgets  (0) 2016.11.17

    댓글

Designed by Tistory.