Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 다음과 같이 해제된 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를 가리키고 있기 때문입니다.
  • 할당 받은 Heap 영역들을 이용해 free chunk의 chunk의 fd 값을 변경할 수 있습니다.
Code Block
titleBreak point - 0x4006ab
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}

...