완료됨
ex2, ex3 예제에 대해서 이해가 덜된것 같아요.. 도와주세요
  1. ex2 예제 문제를 실제 리눅스에서 컴파일 후 했을때는음수값을 넣어도 win 변수 메모리에 도달할 수 없었는데 이유가 무엇일까요?? ㅠㅠ
  2. ex3에서 2147483648, -2147483648 2가지를 넣었을때 win 변조가 되었는데 이유가 무엇일까요?? ㅠㅠ
    도와주시면 감사드립니다!!!
#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
snwo
2024 Invitational Contenders

ex2 : 변수 선언 순서를 생각해보시고, 변수별로 주소출력해보세요.

ex3 : %10 연산을 해서 -8 이 된다면 win 에 접근할 수 있습니다.
허나, 음수일경우 -(-2147483648) 연산으로 양수 2147483648 이 되는데,
4byte int 의 최대값은 2147483647 (2진수로 0111 1111 1111 1111) 이고,
2147483648 은 여기다가 1 을 더해서 2진수로 1000 0000 0000 0000 이 됩니다.
unsigned int 가 아니므로, 최상위비트 (MSB) 가 1로 설정되어있기때문에 음수가 되고,
1000 0000 0000 0000 은 4byte int 의 최소값인 -2147483648 이 됩니다.

결국 signed 4byte int 에서는 2147483648 과 -2147483648 이 똑같다고 할 수 있는거구요.
-2147483648 % 10 = -8 이므로 win 변수에 접근할 수 있게됩니다.
(buf 가 4byte int 배열로 선언되어있기때문에 4바이트씩 접근해서 -8 번째에있는 win 변수에 도달할수있게됩니다.)

2020.07.26. 22:55