탑 청크 병합 관련 질문

해당 문제 강의에서 custom_func 함수는 0x100 바이트 이상의 크기를 갖는 청크를 할당하고, 할당된 청크들 중 원하는 청크를 해제할 수 있는 함수이고 0x410 이하의 크기를 갖는 청크는 tcache에 먼저 삽입되므로, 이보다 큰 청크를 해제해서 unsorted bin에 연결하고, 이를 재할당하여 값을 읽으면 libc가 매핑된 주소를 계산할 수 있다 하였습니다. 그리고 unsorted bin에 포함되는 청크와 탑 청크는 병합 대상이므로, 이 둘이 맞닿으면 청크가 병합되어 이를 피하려면 청크 두 개를 연속으로 할당하고, 처음 할당한 청크를 해제해야 한다고 했습니다.

custom(0x500, "AAAA", -1)
custom(0x500, "AAAA", -1)
custom(0x500, "AAAA", 0)
custom(0x500, "B", -1)

그런데 탑 청크와 인접하지 않기 위함이면 아래와 같이 해도 괜찮지 않을까 생각했습니다.

custom(0x500, "AAAA", -1)
custom(0x500, "AAAA", 0)
custom(0x500, "B", -1)

실제로 수정하여 했을 때 정상작동 하였는데
혹시 강의 코드와 같이 작성하는 이유가 따로 있을까요?

#pwnable
작성자 정보
답변 1
avatar
bincat
세계수

특별한 이유는 없을것같네요!! 단지 edge case를 피하기 위한 추가적인 할당으로 보입니다.

2022.07.12. 16:36
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기