함수 프롤로그 & 에필로그

스택프레임

-함수가 실행되기 위해 스택에 여러 데이터를 올리게되는데 이때 각 함수가 사용하는 스택의 영역

함수 프롤로그

  • 함수내에서 사용할 스택프레임 설정한다

함수 에필로그

  • 함수내에서의 수행을 마치고 처음 호출한 지점으로 돌아가기위해 스택을 복원

  • leave(move ebp, pop ebp)

  • ret

ebp? esp? 에필로그?

pop?스택에서빼줌(스택의 맨위)

mov esp, ebp(esp값을 ebp에 넣어준다.)

pop ebp? esp에 있는 값을 ebp에 넣어준다

함수 프롤로그 & 에필로그 - 예제

환경 red hat linux (Ftz) 어셈문법 intel

  • eip? 레지스터

    • 다음 실행할 코드

  • eps?

    • 스택을 내리는 것굳이 입력을 하지 않아도 시스템적으로 dummy를 넣어 스택을 늘림

  • esp? 스택의 가장 위!

  • ebp? 스택의 바닥(기준) | 절대 안움직임.

서브 넣는ㄴ것 푸쉬는 esp 늘어남

ad는 스택이 줄어든다. 더하니까

*call? jmp? =======> jmp 점프하고 그대로 쭉진행, call main25에서 main30으로 돌아갈수있게해줌 <주소값으로!>

main 호출한애 function 호출받은애

함수호출규약(fastcall, cdecel etc..)

ret?

  • pop eip

  • jp eip

버퍼오버플로우가 일어나면 안될까?

  • ret

  • eip가 다음으로 실행됨 (쉘코드를 넣으면 거기로 실행된다.)

스택 : 가장 마지막에 들어온게 먼저 나갈 수 있다. 정보가 쌓인다

스택의 구조?

기본적으로 함수에 대한 정보들을 포함하고 있다.

지역변수 포함

여기서 가장 취약점이 많이 생기고 버퍼오버플로우가 생길 수 있다.

스택프레임?

리턴어드레스? 가장 아래쪽에 존재함. 특정한 함수가 끝난뒤에 돌아갈 장소를 의미한다

Rbp? 스택이 시작하는 베이스 포인트

변수 c

버퍼

시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 영역은 반드시 저 위치에 있어야 한다.

시스템은 멀티 테스킹이 가능하므로 메모리에는 여러 개의 프로세스가 저장되어 병렬적으로 작업을 수행한다. 가용한 메모리 영역에는 여러개의 segment들이 저장될 수 있다.

segment는 위에서 언급한 바와 같이 하나의 프로세스 묶은 것으로 실행 시점에 실제 메모리의 어느 위치에 저장될 지가 결정된다.

ret를 바꿔서 서버에 나쁜 짓을 할 수 있다. ex) 버퍼오버플로우

Heap?

동적으로 할당되는 변수들이 위치하는 공간 C언어 mallocq?

프로그램에서 **자유롭게 할당하고 해제할 수 있는 영역**입니다.

BSS?

프로그램에서 사용된 변수들이 실제로 위치한 영역. 초기화가 아직 이루어지지 않은 곳

Data는 초기화가 이루어진 곳

Text 는 우리가 작성한 코드가 들어가는 곳, 모두 기계어, 컴파일러가 만들어놓은 코드

설정

트랙백

댓글