완료됨
포맷스트링 첫 문제

%x를 열번 입력하면 왜 flag 값이 나오는 건가요?

#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
초보자
강의 수강: 10

printf("text %d",val)
---자세한건 함수호출규약을 자세히 배우시면 알수있음 대략적인 이해를 위해 작성함 푸쉬순서나 내용이 조금틀릴수있음 개념만 이해하세요

(메모리상의 위치 1000)push val
(메모리상의 위치 0996)push "text %d"
(메모리상의 위치 0992)call printf

printf 동작시 처음 push된 "text %d"를 가져옴 그리고 해석해서 포맷스티링을 파악함
여기서는 %d가 하나여서 996에서 +4한 값을 해서 1000번지를 가져오게됨

근데 만약 %d가 10개가있으면 1004번지 값1008번지 값 1012번지 값을 가져오게되서 해당 주소에 있는 값을 출력함
이해를 돕기위해서만 썻는데 함수 호출규약을 보시면 돌아갈 메모리위치 등을 푸쉬하거나 하기 때문에 그런정보가 들어가 있는거임

요약 함수호출규약을 다시 보시면 될 듯
함수가 호출될때 어떤것이 스택에 쌓이고 매개변수를 어떻게 참조하는지 보시면될듯해요.

2020.07.15. 09:49