Heap

    ptmalloc free & bin

    메모리를 할당할때 어떤 일이 일어나는지 정리했으니까 이번에는 free를 호출할때 어떤 일이 일어나는지 보자 1. What is BIN? 우선 bin이 무엇인지 알아보자 우리는 c언어에서 malloc과 free를 이용하여서 동적으로 메모리를 관리한다. 만약 malloc을 이용하여서 메모리를 할당하고 free를 이용하여 free chunk를 만들어준다면 이 free chunk는 bin이라는 구조에 들어가게 된다. bin은 크게 4가지 종류로 나뉜다. 1. fast bin 2. unsorted bin 3. small bin 4. large bin bin들에 대한 정보는 malloc_state 구조체에서 확인 할 수 있다. struct malloc_state { /* Serialize access. */ mut..

    Structure of Chunk

    우선 chunk는 malloc() 함수가 호출됨으로서 할당받는 영역을 chunk라고 부른다. 32bit에선 chunk가 8byte 단위로 할당이 되고 64bit에서는 16byte 단위로 할당이 된다. chunk는 크게 3가지 타입을 가진다. 기본 구조는 동일하며 약간의 내용물의 차이가 있다. 1. Allocated Chunk (할당되어 있는 청크) 우선 Allocated Chunk의 Structure부터 살펴보자 - 1. Prev_size - 만일 해당 chunk 바로 이전 chunk가 해제된 경우, Prev_size에는 이전 chunk의 크기를 저장한다. 만약 아무런 해제된 chunk가 없고 죄다 할당된 chunk라면 Prev_size는 기본값인 0으로 바뀐다. - 2. size - size field..

    Dynamic memory allocator (glibc malloc)

    오늘은 Dynamic memory allocator를 정리할거다. 근데 다른 Dynamic memory allocator 중에서도 glibc의 malloc을 주로 정리할것이다. 우선 Dynamic memory allocator는 동적으로 할당된 메모리를 관리하기 위해서 사용하는 것이다. Allocator는 크게 두 종류로 나뉜다. 1. Explicit allocator : 개발자가 공간의 할당 / 해제를 관리 EX) libc의 malloc과 free 2. Implicit allocator : 개발자는 공간의 할당만 담당하고 free는 내부적으로 처리 EX) Java의 GC, Lisp등 Explicit allocator에는 위 예시 말고도 여러가지 종류가 있다. - dlmalloc - 리눅스 초창기에 사용..

    first-fit

    first fit은 glibc의 메모리 할당 방법 중 하나에 속한다. glibc의 메모리 할당 방법에는 대표적으로 3가지가 있다. 1. first fit 2. best fit 3. worst fit 그중 이 글에서 정리할 first fit은 순차적으로 할당 가능한 메모리 영역을 탐색하고, 발견하면 그 즉시 바로 할당하는 구조이다. best fit은 External Fragmentation(외부 단편화)이 가장 적게 나는 곳에 할당하는 구조다. worst fit은 남아 있는 공간 중 가장 큰 hole에 할당하는 구조이다. how2heap의 first-fit은 취약점을 보여주는 것이 아닌, 할당 구조에 대해서 설명하는 코드가 있다. #include #include #include int main() { fp..