프로그램상의 2번 malloc 실제로 allocated 된 3개의 chunck?

소스 코드 상에서는 2번의 malloc을 수행하는데
pwndbg의 heap 명령어를 통해 확인해보면 실제로 allocated 된 chunk는 3개인 것을 확인할 수 있습니다.

int main() {
    char *ptr = malloc(0x20);

    struct over *over = malloc(0x20);

    initialize();

    over->table = table_func;

    scanf("%s", ptr);

    if( !over->table ){
        return 0;
    }

    over->table();
    return 0;
}

Topchunk는 이해가 가는데,
이 191 바이트 크기의 heap영역+0x8부터 시작하는 chunk는 무엇인가요?

(glibc 소스코드 오디팅을 통해서 해답을 찾을 수 있을거라 생각하는데, 너무 방대하여 어디부터 살펴보면 좋을지 감이 잘 오지 않습니다. 이에 glibc 디버깅을 위한 팁을 주신다면 매우 감사할 것 같습니다.)

#pwnable
작성자 정보
답변 2
avatar
믕믕이부하
대표 업적 없음

main 코드가 시작할때부터 할당되어 있는 청크니 무시하셔도 됩니다.

2023.01.02. 18:24
Greedun
Closed Beta Tester

좀 더 공부하시면서 알게되실 내용인데 2.26버전에서는 tcache로 먼저 청크 관리하게 됩니다.
tcache에서는 tcache_perthread_struct구조체로 관리되며 이 구조체가 들어갈 청크가 가장 먼저 할당된 것입니다.

2.23버전에서 확인하시면 해당 청크가 확인 안되는것을 확인 가능할거예요

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