분류 전체보기

· #Tip
Heap unlink. 일단 unlink는 특정 chunk를 free할 때 이전에 free된 chunk들 중에서인접한 chunk들의 prev_size flag를 보고, flag가 0으로 셋팅되어 있으면, 그 chunk와 병합을 진행한다.chunk는 이전 글에서도 말했듯이 malloc된 메모리를 말한다. #define unlink(P,BK,FD) { BK = P -> bk; FD = P -> fd; FD => bk = BK; BK => fd = FD; } unlink는 매크로함수로 지정되어 있으며, P,BK,FD는 위의 화면처럼 P는 현재의 chunk, BK는 이전 chunk, FD는 다음의 chunk가 된다. 일반적으로 chunk의 구조는 낮은 주소 ===================> 높은 주소. pr..
· #Tip
Bin. bin 종류는 다음과 같다.1.Fast bin2.Small bin3.Large bin4.Unsorted bin bin 정보는 "malloc_sttate" 구조제에서 관리된다. ==>FastbinsY==>"Fast bin"을 관리한다.==>Bins==> "Unsorted bin, Small bin, Large bin"을 관리한다. ===> Bins의 구성 ===> index 1 ==> Unsorted bin index 2 ~ 63 ==> Small bin index 64 ~ 146 ==> Large bin 1-1 Fast bin.==>LIFO 방식을 사용.==>10개의 bin 사용==>해제된 Fast chunk를 보관.==>속도 향상을 위해 single-linked list로 구성==> 처리하는 ..
· #Tip
Chunk. Chunk는 힙 영역에서 찾을 수 있으며, 4가지 타입이 있다.1. Allocated chunk. (할당 된 청크)2. Free chunk. (자유로운 청크)3. Top chunk. (상단 청크)4. Last Remainder chunk. (마지막 남은 링크) Allocated, Free chunk는 "malloc_chunk" 구조체를 이용해 필요한 정보를 저장한다. 1-1. Allocated chunk.==> Allocated chunk 의 최소 크기는 32Bit = 16 byte. 64Bit = 32 byte. 위의 화면은 Allocated chunk Sample(64bit).Allocated chunk는 정보를 포함한다.prev_size ==> 이전 Chunk가 해제되면, 이 필드에 이..
· #Tip
Arena. Arena는 malloc()에서 메모리 영역과 메모리 관리 부분을 칭한다.즉 프로세스에 할당된 heap 영역(즉------non mmapped).Main_arena는 malloc.c에서 "struct malloc_state"이라는 구조체를 사용하는 변수다.힙 메모리의 인접한 지역을 arena라고 부른다. 이 arena는 메인 스레드로써 생성되었기 때문에, 이것을 main arena라고 부른다. 이후, 할당 요청은 이 arena를 사용하여 비어있는 공간이 없어질 때 까지 유지하면서 사용한다. arena의 비어있는 공간이 고갈되었을 경우, 프로그램의 break 위치를 증가시킴으로써 더욱 성장할 수 있다 (top 청크의 크기를 증가시켜 여분의 공간을 포함할 수 있도록 조정한 후). 이와 비슷하게 ..
· #Tip
procees & thread. 일단 프로세스의 사전적 의미는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다.프로세스는 하드 디스크에 설치되어 있는 프로그램을 메모리상에 실행중인 작업이다.과거 OS에서는 한 번에 한 가지 작업밖에 할 수가 없었다.하지만 요즘 OS는 한 번에 여러가지 작업을 동시에 할 수 있다.cf) 운영체제에서 여러 개의 프로세스를 동시에 실행하는 것을 멀티태스킹.어떤 작업을 하나 이상의 프로세스에서 병렬로 처리하는 것을 멀티프로세싱. learn more about the process. 프로세스는 프로그램 실행시 Code, Data, Stack, Heap 구조로 되어있는 독립된 메모리 영역을 할당 받는다.이런 특징은 멀티 프로세싱 방식에서 단점을 가지게 된다.멀티 프로세싱 방..
· #Tip
The heap 2. 힙 오버플로우를 이용하는 방법. 일단 버퍼 오버플로우는 C or C++ 컴파일러가 배열의 경계 검사를 하지 않아 선언된 크기보다 더 큰 데이터를 기록함으로써 발생되는 현상.운영체제가 스택 or 힙 영역에 임의의 데이터 기록 및 실행을 허용함으로써 발생되는 현상. Heap buffer overflow?힙 데이터 영역에서 일어나는 버퍼 오버플로우를 힙 오버플로우라 부르며, 스택 기반 오버플로우와는 다른 방법으로 볼 수 있다.이 데이터를 특정한 방법으로 오염시켜 응용 프로그램이 연결 리스트 포인터 등과 같은 내부 자료 구조를 덮어쓰게 한다.기본적인 힙 오버플로우 기술은 동적 메모리 할당 연결(malloc() 상위 수준 데이터)를 덮어씀으로써 프로그램 함수 포인터를 조작한다.주로 root ..
· #Tip
The heap. 1.About heap. 일단 힙(Heap)이란 스택과는 달리 사용자가 직접 관리하는 메모리 영역.Ex)int* a; // stack에 저장.a = (int *)malloc(sizeof(int) * 10); //heap에 저장.위 코드에서 int형 포인터 변수 a를 선언했고, 이건 일반적인 포인터형 변수이다. 따라서 stack 영역에 저장된다.다음줄의 malloc()함수는 힙 영역에 int형(4byte) 10개의 공간만큼을 할당.그 영역에 대한 주소값을 리턴한다. 이 리턴값을 a라는 변수에 저장한다. -----------------------------------------------| | || a < = 4 * 10(40bytes) | | | | 대략적으로 이런 모양이다. 중요한 것은..
· #Tip
PLT and GOT PLT=Procedure Linkage Table.==> 외부 프로시저를 연결해주는 테이블이고 PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다.GOT=Global Offset Table.==> PLT가 참고하는 테이블, 프로시저들의 주소가 들어있다. 흔히 PLT & GOT는 "함수를 호출하면(PLT를 호출하면) GOT으로 점프하는데 GOT에는 함수의 실제 주소가 쓰여있다.첫번째 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 과정을 거쳐 주소를 알아낸다.두번째 호출부터는 첫 번째 호출 때 알아낸 주소로 바로 점프한다. 1.PLT와 GOT가 왜 필요가 있는 건가?2.함수의 주소로 바로 점프를 왜 안할까?3.PLT와 GOT가 왜 필요가 있는 건가?4.GOT가 ..
Allblackk
'분류 전체보기' 카테고리의 글 목록 (35 Page)