완료됨
포맷 스트링 버그 실습 정답 질문 있습니다
- printf(buf)에서 버퍼만 출력하는거면 총 32바이트만 출력되는게 아닌가요?
printf_stackframe과 변수 flag가 왜 출력되는지 모르겠습니다. - 출력부분의 공백은 왜 있는 거죠?
- 25782025로 출력되는 것이아닌 거꾸로 25207825이런식으로 출력되는 이유도 궁금합니다.
#시스템해킹
작성자 정보
답변
1
snwo
2024 Invitational Contenders
- 스택은 항상 변하기때문에, printf(buf) 에서는 esp+4 부터 출력이 됩니다. printf 를 출력할때 esp+4 가 printf_stackframe 입니다.
- 출력부분의 공백은 입력값의 공백입니다.입력할때 공백을 안주면 공백없이 출력됩니다 (ex: %x %x%x -> 12341234 1234123412341234 )
- %x 로 출력을 하시면, 정수형으로 출력하는것이기때문에 리틀엔디언 방식을 사용하는 아키텍쳐에서는 정수형은 거꾸로 저장되고, 거꾸로 출력됩니다.
ex : 0x12345678 -> (낮은주소->) 78 56 34 12 (->높은주소) -> 출력 : 78563412
순서대로 출력하실려면 %4c 로 출력하시면 됩니다.
이해안되시거나 더 궁금한거 있으면 댓글이나 프로필에 주소로 남겨주세요