[DreamHack워게임] Out Of Boundary ex3
작성자 정보
- za9uar 작성
- 작성일
본문
//oob-3.c #include <stdio.h> int main(void) { int idx; int buf[10]; int dummy[7]; int win; printf("Which index? "); scanf("%d", &idx); if(idx < 0) idx = -idx; idx = idx % 10; // No more OOB!@!#! printf("Value: "); scanf("%d", &buf[idx]); printf("idx: %d, value: %d\n", idx, buf[idx]); if(win == 31337){ printf("Theori{-----------redacted---------}"); } } |
풀이 힌트
(0) idx % 10 결과를 -8로 만들어야한다.
(1) 4 bytes int의 최대 값은 2147483647 이다. (2진수로 0111 1111 1111 1111)
(2) 2147483648은 MSB(최상위비트) 값이 음수여서
4byte int 의 최소값은 -2147483648 이다. (2진수로 1000 0000 0000 0000)
(3) signed 4byte int 에서는 2147483648 과 -2147483648 이 똑같다고 할 수 있다.
(4) -2147483648 % 10 = -8 이므로 win 변수에 접근할 수 있게된다.
(buf 가 4byte int 배열로 선언되어있기때문에 4바이트씩 접근해서 -8번째에있는 win 변수에 도달할수있음)
※ 드림핵 snwo 님 Q&A 참조
https://dreamhack.io/forum/qna/274/
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.