일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ncurses
- .nret core 배포
- BOF
- doupdate
- epoll_wait
- epoll
- 취약점
- LOB
- 풀이
- .net core 7
- REDIS
- NAPT
- ioctl
- packet filter
- vtable
- wrefresh
- rfc5508
- 어셈블리어
- mvwin
- edge trigger
- iptables
- wnourefresh
- architecture
- packet flow
- cbpf
- DOCKER-USER
- level trigger
- C언어
- Docker
- Compiler
- Today
- Total
Tuuna Computer Science

malloc & heap 찍어누르기 2탄과 3탄은 트레이닝 바이너리 문제를 풀다가 unsortedbin을 통해 library leak과 fastbin을 통해 특정 메모리 할당에 대해 배운것을 정리할겸 작성 malloc을 통해 stack 공간 할당하기 기본적인 이론은 fastbin에 들어있는 chunk들은 병합을 하지 않으며 LIFO방식의 단일 연결리스트를 구성하고 있다. 그리고 재할당시 최상위 chunk를 재할당하며 다음 재할당시 반환된 chunk의 fd값에 있는 chunk를 재할당하게 된다. 그럼 fd값을 조작할 수 있다면 조작된 fd값에 allocate가 된다. 일단 a와 b를 malloc을 통해 할당한다. 0은 8바이트로 취급된다. b와 a 순서대로 free한다. a와 b는 8바이트이므로 fastb..

protostar heap3문제의 double free bug를 구글링 3일 동안 해가면서 공부한것을 정리하려함. 일단 설명할 malloc()은 x86기준으로 설명할 것임. 우리가 알고 있는 malloc함수는 Heap영역에 우리가 원하는 크기만큼 메모리를 할당하는 것인걸로 알고 있고. 해제 할때는 해당 메모리의 포인터값을 free()함수의 인자로 넣으면 된다는 것을 알고 있다. 그런데 여기서 이상한 점이 있다. free()라는 함수에 단지 Heap영역에 할당받은 포인터값을 넣었는데 어떻게 메모리에서 해제되었을까. 그 이유는 malloc의 chunk(메모리 할당 부분)에서 찾아볼 수 있다. struct malloc_chunk { INTERNAL_SIZE_T prev_size; /* Size of previ..

컴파일러가 기계어 코드를 만들어 내기까지의 단계에는 Lexical Analysis, Syntax Analysis, Semantic Analysis, IR Generation, IR Optimization, Code Generation, Optimization이 있다. Optimization 단계의 경우 최종적으로 만들어낸 기계어 코드를 바탕으로 최적화를 시키는데 예를 들어, Control Flow Analysis과 Data Flow Analysis을 바탕으로 최적화를 진행시킨다. 여기서 Data Flow Analysis의 경우 내가 잘 모르기때문에 일단 패스할 예정 (공부해서 추가할거임) Control Flow Analysis의 경우 프로그램의 제어흐름을 분석하는 것을 의미한다. 그럼 컴파일러는 Cont..