Post

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\_addrtop\_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.