/* ----------- 시스템 할당을 다루기 위한 함수이다. -------------- */ /* sysmalloc은 시스템으로부터 더 많은 메모리를 요구하는 경우(즉 top chunk의 크기가 부족할 때) 실행된다. 시작부분에, av->top(top chunk)이 요청한 크기를 할당하기에 충분한 크기가 없다고 추정된다. 그러므로 av->top(top chunk)가 확장되거나 대체될 필요가 있다. */ static void * sysmalloc (INTERNAL_SIZE_T nb, mstate av) { mchunkptr old_top; /* incoming value of av->top */ INTERNAL_SIZE_T old_size; /* 그것의 크기 */ char *old_end; /* 그것의..
https://lclang.tistory.com/165 malloc_hook => free get shell 개쩔었다ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ secret of my heart 풀면서 운으로 발견했는데 ㄹㅇ루다가 어리둥절 하면서 중간에 호출된 memset 과 free 를 분석해봤다. memset 은 딱히 뭔가 없었다. 문제는 바.. lclang.tistory.com 이 블로그에서 더 자세히 볼 수 있는데 심심해서 한번 되는지 함수를 gdb로 따라가 봤다. 방법은 continue를 실행해서 프로그램이 종료되거나 쉘이 실행될때, 그 함수로 들어가보는 식으로 했다. 그럼 조금만 dl__~~~~함수를 지나다보면 그 strdup()함수가 나오는데 이함수에서 malloc()을 써서 메모리를 할당하고 복사하는..
static void _int_free (mstate av, mchunkptr p, int have_lock) { INTERNAL_SIZE_T size; /* free시킬 크기 */ mfastbinptr *fb; /* 관련된 fastbin */ mchunkptr nextchunk; /* 인접한 청크 */ INTERNAL_SIZE_T nextsize; /* 인접한 청크의 크기 */ int nextinuse; /* 물리적으로 다음 청크가 사용줄일 때 셋팅 */ INTERNAL_SIZE_T prevsize; /* 물리적으로 이전 청크의 크기 */ mchunkptr bck; /* 링킹을 위한 임시 변수 */ mchunkptr fwd; /* 링킹을 위한 임시 변수 */ size = chunksize (p); //..
2019/08/09 - [분류 전체보기] - _int_malloc 함수 분석 (2) _int_malloc 함수 분석 (2) 2019/08/09 - [힙(heap)] - _int_malloc 함수 분석 (1) _int_malloc 함수 분석 (1) INTERNAL_SIZE_T nb; /* 요청한 크기를 알맞게 가공한 변수*/ unsigned int idx; /* 연관된 bin의 index */ mbinptr bin; /* 연.. youngsouk-hack.tistory.com 이 글과 이어지는 내용입니다. 안보셨으면 보고 오시는 것을 추천드립니다. } /* place chunk in bin */ if (in_smallbin_range (size)) { victim_index = smallbin_index ..
2019/08/09 - [힙(heap)] - _int_malloc 함수 분석 (1) _int_malloc 함수 분석 (1) INTERNAL_SIZE_T nb; /* 요청한 크기를 알맞게 가공한 변수*/ unsigned int idx; /* 연관된 bin의 index */ mbinptr bin; /* 연관된 bin */ mchunkptr victim; /* 검사할 or 선택된 청크 */ INTERNAL_SIZE_T size;.. youngsouk-hack.tistory.com 이 글과 이어지는 내용입니다. 이 글을 안보신 분들은 저 글을 먼저 봐주세요. #if USE_TCACHE /* While we're here, if we see other chunks of the same size, stash the..
INTERNAL_SIZE_T nb; /* 요청한 크기를 알맞게 가공한 변수*/ unsigned int idx; /* 연관된 bin의 index */ mbinptr bin; /* 연관된 bin */ mchunkptr victim; /* 검사할 or 선택된 청크 */ INTERNAL_SIZE_T size; /* 그것의 크기 */ int victim_index; /* 그것의 bin index */ mchunkptr remainder; /* 분할하고 남은 나머지 */ unsigned long remainder_size; /* 그것의 크기*/ unsigned int block; /* bit map traverser */ unsigned int bit; /* bit map traverser */ unsigned i..
mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ 필요한 변수 선언 void (*hook) (void *, const void *) = atomic_forced_read (__free_hook); if (__builtin_expect (hook != NULL, 0)) { (*hook)(mem, RETURN_ADDRESS (0)); return; } 이전 글과 마찬가지로 더 공부한 뒤 나중에 설명하겠습니다. if (mem == 0) /* free(0) has no effect */ return; NULL 메모리를 free하는 것은 효과가 없다, p = mem2chunk (mem); if (chunk_is_mmapped (p)) /* release ..
mstate ar_ptr; void *victim; 필요한 변수를 선언한다. void *(*hook) (size_t, const void *) = atomic_forced_read (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); calloc때와 마찬가지로 더 공부한 뒤에 따로 설명하겠습니다, ㅠ.ㅠ #if USE_TCACHE /* int_free also calls request2size, be careful to not pad twice. */ size_t tbytes; checked_request2size (bytes, tbytes); size_t tc_idx = csiz..