-
malloc - do_check_inuse_chunk()Hack/Pwnable 2016. 12. 1. 04:31
chunk가 있는지 검증하고, 청크가 맵핑되어있으면 return 시킴.
현재 청크의 inuse가 0이면 Abort를 띄우고, 다음 청크의 포인터값을 next에 집어넣는다.
이제 여기서가 핵심인데, 아래 코드를 보자
if (!prev_inuse(p)) {
mchunkptr prv = prev_chunk(p);
assert(next_chunk(prv) == p);
do_check_free_chunk(av, prv);
}
해당 청크의 prev_inuse가 0이면 해당 분기문을 타게되는데, prv 구조체변수에 아래와 같은 값이 들어간다.
#define prev_chunk(p) ((mchunkptr)( ((char*)(p)) - ((p)->prev_size) ))
인자로받은 청크에서 prev_size값을 뺀다. 이값은 이전 청크를 나타내니 패스
next_chunk로 이전청크와 비교하는데 만약 틀리면 Abort를 띄운다. 그리고 이전 청크가 free chunk인지 확인을하고 해당 루틴은 끝나게된다.
뭐 그냥 나머지는 볼거없는데, next 청크에서 inuse가 0이면 프리청크인지 검사하는게 있군요 하하 뭐 이거 계속 반복하는듯
'Hack > Pwnable' 카테고리의 다른 글
nc서버 열기 (XINETD) (0) 2016.12.19 malloc large_chunk exploit scenario (2) 2016.12.02 malloc - do_check_free_chunk() (0) 2016.12.01 malloc - do_check_chunk() (0) 2016.12.01 malloc - unlink (0) 2016.12.01