실습환경 : Ubuntu 16.04

실습코드

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char* a0=(char*)malloc(0x3f0);
    char* b0=(char*)malloc(0x80);
    char* a1=(char*)malloc(0x400);
    char* b1=(char*)malloc(0x40);
    char* a2=(char*)malloc(0x410);
    char* b2=(char*)malloc(0x200);
    char* a3=(char*)malloc(0x420);
    char* b3=(char*)malloc(0x200);
    char* a4=(char*)malloc(0x430);
    char* b4=(char*)malloc(0x300);
    char* a5=(char*)malloc(0x440);
    char* b5=(char*)malloc(0x300);
    char* a6=(char*)malloc(0x450);
    char* b6=(char*)malloc(0x300);
    char* a7=(char*)malloc(0x460);
    char* b7=(char*)malloc(0x300);
    char* a8=(char*)malloc(0x470);
    char* b8=(char*)malloc(0x300);
	
    free(a0);
    char* e0=(char*)malloc(0x500);
    free(a1);
    char* e1=(char*)malloc(0x500);
    free(a2);
    char* e2=(char*)malloc(0x500);
    free(a3);
    char* e3=(char*)malloc(0x600);
    free(a4);
    char* e4=(char*)malloc(0x600);
    free(a5);
    char* e5=(char*)malloc(0x500);
    free(a6);
    char* e6=(char*)malloc(0x500);
    free(a7);
    char* e7=(char*)malloc(0x600);
    free(a8);
    char* e8=(char*)malloc(0x600);

	return 0;
}

위 코드는 보기 쉽게 병합이 진행되지 않게 malloc 및 free가 되는 코드입니다. 요청한 사이즈 그대로 디버깅을 통해 largebin에 들어가는 것을 보기위함입니다.

마지막 malloc이 호출된 직후 메모리 상황을 보겠습니다. (a로 시작하는 변수들이 의미있는 부분임)

Untitled