ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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라는 값이 저장)

     

    리턴 어드레스 값을 변조 할 수 있다면 다음에 실행 될 코드의 주소를 마음대로 선택할 수 있게 된다!!

    댓글

Designed by Tistory.