The House of Force
The House of Force
https://github.com/shellphish/how2heap/blob/master/house_of_force.c
존내 큰 chunk를 할당해버린다!
top chunk size를 -1
로 만들어 mmap()
호출을 방지하고, target addr이 있는 곳 까지의 차 만큼의 커다란 chunk를 할당하면 그 다음 malloc()
때 target 위치에 chunk를 할당 및 반환하게 된다.
1
2
3
4
5
\*top\_ptr = -1;
difference = (target\_addr - 2\*sizeof(void\*)) - top\_ptr;
malloc(difference); // target 직전 까지 할당
target = malloc(); // return chunk that contain target
target\_addr
이 top\_ptr
보다 위에 위치해 있을 때는 음수가 나오지만, 상관없다. memory range를 넘어가는 크기의 chunk를 할당하는 것 자체는 어차피 size field에 그대로 넣어주고 포인터만 반환하면 끝이니까 fault가 발생할 여지가 없다. malloc()
에 존재하는 size check는 모두 bins에 있는 chunk를 제공할 때 수행하는 check이므로, 커다란 chunk를 요청할 때 수행하는 check는 따로 없어 신경쓰지 않아도 된다.
limitation
top chunk size를 -1
로 변경할 수 있어야 한다.
This post is licensed under CC BY 4.0 by the author.