Hacking/Pwn
힙을 gdb로 살펴보자!
알 수 없는 사용자
2017. 10. 2. 17:12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int main(int argc, char *argv[]) { char *buf = (char *)malloc(256); char *buf1 = (char*)malloc(512); strcpy(buf, argv[1]); strcpy(buf1, argv[2]); printf("%s\n", buf); free(buf); free(buf1); } | cs |
일단 오늘 분석해볼 코드이다!
(출처: s0ngsari.tistory.com)
이 코드를 하나하나 gdb로 분석해보면서 malloc과 free가 어떤식으로 힙으로 저장되는지 그 과정을 살펴볼것임!
http://tribal1012.tistory.com/78 < 이 글과 같이보면 좋아요!
먼저 첫번째 malloc에 브레이크를 걸고 힙영역을 살펴볼것이다.
보면 size of chunk가 나와있다
왜우리는 0x100을 할당했는데 size가 0x111이냐 하고 한다면
할당했을떄 나오는 청크이다. (Allocated Chunk)
prev_size (8) + chunk_size (8) + user data (256) + null (1) = 273 (0x111)
이 된다! (64bit) 기준
두번쨰 malloc에 브레이크를 걸고 실행한 결과인데, 0x211에는 원래 top chunk가 있던자리였는데 두번쨰 malloc을 할당한 크기가 저장되어있다!
그리고 두번쨰 free까지 다하고 브레이크를 걸면 chunk_size 뒤에 이상한 값이 들어있는데 이건 fd와 bk라고 한다!
fd - forward pointer
bk - backward pointer
이 fd와 bk를 살펴보면 아주 신기한게 들어있다
오 fd+8 를 살펴보니까 top chunk가 저장되어있다!