HanJeouk의 개인공부 블로그

링크 [출처: shellphish]


1. p를 400 만큼 할당을 한다.

2. free 됐을 때 top chunk 와 병합하지 않게 사이즈가 500 다른 청크를 만들어준다.

3. p를 free한다.

4. free된 청크 p의 fd와 bk에는 p가 small bin이라 free가 됐을 때 unsorted bin에 관리가 돼서 main_arena+88의 주소가 있다. 그래서 bk를 스택에 있는 변수의 주소 -8(32bit) or 16(64bit) 를 해준다. 그러면 free가 이전 청크가 있다고 판단을 하여 다음에 malloc 를 하면 bk+ 8 or 16 에 해준다. 

5. 400만큼 할당을 하면 bk 가 변수 주소 - (8 or 16) 이기 때문에 할당됐을 때 변수의 주소로 할당이 된다. free된 chunk 를 bin 에서 제거하는 과정에서 bk+0x10에 fd를 넣기 때문에 할당을 하면 변수에 main_arena+88 값이 들어간다.

#-8과 -16은 32bit 와 64bit 기준으로 청크의 fd에 해당한다.

'Documents > how2heap' 카테고리의 다른 글

how2heap house_of_lore  (0) 2018.03.02
how2heap house_of_force  (0) 2018.02.20
how2heap poison_null_byte  (0) 2018.01.16
house_of_einherjar  (0) 2018.01.15
first_fit & unsafe unlink  (0) 2018.01.08