-
Pwnable. 해쿨핸드북 요약 정리 (2차)Pwnable/이론 2019. 12. 31. 02:37
Section 04. "메모리 주소"와 친해지기
우리가 사용하는 변수(버퍼)들이 모두 내부적으로는 메모리 주소를 통해서 접근된다
"변수는 삼겹살이다" (해당하는 정보가 3겹)
주소(&연산자),크기(sizeof),값
Section 05. 각 변수의 메모리 주소 비교해보기
나중에 선언된 변수는 낮은 주소를 받게 된다.
Section 06. gets() 함수 이해하기
gets() : "키보드로부터 문자열을 입력받아 버퍼에 저장" 하는 함수
이때 하나의 인자를 요구 하는데, 그것은 입력받은 갑을 저장할 버퍼이다.버퍼란 사실 &burffer 와 동일하다. 즉 burffer 배열 변수의 시작 주소이다.
(c언어에서 "배열의 이름은 그 배열의 시작 주소와 동일하다"하고 정의 되어 있기 때문)
인자 : "메모리 주소"값!
시점 : "엔터"가 입력 될 때까지
요약
gets() : 사용자가 엔터를 치기 전까지 입력한 값들을 인자로 주어진 메모리 주소에 저장한다
(엔터를 입력하기 전까진 많은 값을 입력할 수 있다는 점이 버퍼오버플로우의 취약점을 야기하기 충분하다.)
Section 07. 함수란 무엇인가요?
함수: "특정한 기능을 하는 소스 코드를 따로 빼내어 묶어놓은 것"
장점 : 1. 기능별로 구분되기 때문에 분석이 쉬워짐
2. 같은 코드가 여러번 필요시 함수로 지정하여 함수만 필요할때 호출해 주면 됨
3. 기존 코드를 재활용하여 새로운 프로그램을 만들때, 해당하는 함수만 복사해 와서 사용하면 됨
4. 함수별 변수가 관리되어 중복되거나 헷갈릴 염려가 줄어듬
프로시저 : 절차(결과return 없음)
Section 08. 함수의 호출과 복귀
함수를 호출할 때 무한루프가 발생할 수 있음
"복귀할 때 참조할 위치"를 메모리에 저장해 놨다가 함수 종료 시 참조하는 방식을 사용.
따라서 "복귀할 때 참조할 위치(주소)"를 "리턴 어드레스(Return Address)" 라고 부른다.
<메모리 위치>
지역변수 : 나중에 선언한 변수가 낮은 메모리 주소에 할당
호출된 함수 인자 : 나중에 선언한 변수가 높은 메모리 주소에 할당
get_area() : 다른 인자들보다 더 낮은 주소에 할당
자식함수 내의 변수 < ?? < 자식 함수의 인자들 < 부모 함수 내의 변수들
순서로 메모리 주소가 할당됨
Section 09. 리턴 어드레스
리턴 어드레스 : 저장되는 메모리 주소엔 항상 고정된 값이 들어가 있는 것이 아니라, 함수가 호출될 때마다 그에 적합한 값( 다음에 실행될 코드의 주소 ) 가 저장되게 된다.
자식 함수 내의 변수 < ? < 리턴 어드레스 < 자식 함수의 인자들 < 부모 함수 내의 변수들
위에서 ?? 공간에 위치하고 있는 것 (두개의 공간 중 오른쪽 공간에 위치함)( ? : SFP라는 값이 저장)
리턴 어드레스 값을 변조 할 수 있다면 다음에 실행 될 코드의 주소를 마음대로 선택할 수 있게 된다!!
'Pwnable > 이론' 카테고리의 다른 글
Pwnable. 해쿨핸드북 요약 정리 (5차) (0) 2020.01.02 Pwnable. 해쿨핸드북 요약 정리 (4차) (0) 2020.01.02 Pwnable. 해쿨핸드북 요약 정리 (3차) (0) 2020.01.01 Pwnable. 해쿨핸드북 요약 정리 (1차) (0) 2019.12.23