...
- 다음과 같이 해제된 Heap 과 동일한 크기의 Heap을 생성합니다.
- 4번재 Heap: 0x602010
- 5번재 Heap: 0x602090
- fastbinsY의 변화
0x602000 → 0x602080 → 0x602000 → 0x602080
- malloc()함수는 fastbinsY에 동일한 크기의 free chunk가 존재하기 때문에 fastbinsY에 등록되어 있는 heap 영역을 재할당 합니다.
- 이러한 현상이 발생하는 이유는 다음과 같습니다.
- fastbins은 free chunk를 Single list로 관리하고 있습니다.
- 동일한 크기의 fast chunk가 여러 개가 해제되면, chunk header의 fd 영역을 이용해 관리합니다.
- 즉, 해당 현상이 발생하는 이유는 Double free로 인해 buf1과 buf2 free chunk의 fd 값이 상대 chunk를 가리키고 있기 때문입니다.
- fastbins은 free chunk를 Single list로 관리하고 있습니다.
- 할당 받은 Heap 영역들을 이용해 free chunk의 chunk의 fd 값을 변경할 수 있습니다.
Code Block | ||
---|---|---|
| ||
gdb-peda$ c Continuing. Breakpoint 4, 0x00000000004006ab in main () gdb-peda$ i r rax rax 0x602010 0x602010 gdb-peda$ p main_arena.fastbinsY $5 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602080, 0x0, 0x0, 0x0} gdb-peda$ c Continuing. Breakpoint 5, 0x00000000004006b9 in main () gdb-peda$ i r rax rax 0x602090 0x602090 gdb-peda$ p main_arena.fastbinsY $6 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602000, 0x0, 0x0, 0x0} |
...