728x90

sum.c

위 코드의 스택프레임을 정리할려고 한다.

RET이 스택의 가장 아래쪽이다.(스택이 위로 쌓인다고 가정할때) (스택은 주소값상에서는 위에서부터 아래로 쌓인다.)

RET(return address)은 함수종료후 돌아갈 주소를 가리킨다.

main함수 실행 전 _start가 실행되고 _start에서 main을 호출하는데 main함수가 종료되면 다시 _start로 돌아온다. 이때 돌아가는 주소가 RET에 저장되어 있다.

 

함수의 BASE포인터가 RET 바로위에 저장되고 RBP 이후로 지역변수들이 차례로 저장된다. 변수 C가 RBP바로 위에 저장된 모습이다.

 

sum 호출 후 스택프레임

함수를 호출할 때 그함수의 매개변수는 그함수의 RET 아래에 저장된다.

sum을 호출할때 매개변수 x, y가 sum의 ret 아래에 저장된 모습이다.

 

sum 함수가 종료되면 변수 X ~ RBP, 버퍼 까지 모든 스택들이 사라진다. 그리고 변수 C에는 3이 들어간다.

 

sum 함수 종료 후 스택 프레임

sum의 반환을 통해 변수 C에 3이 저장된 형태이다. 메인함수가 종료되면 3도 main함수가 호출된 곳으로 반환한다.,

 

RET의 경우 함수 종료 후 돌아가는 메모리 주소가 저장되어있다. bufferover flow를 통해 ret을 조정하여 임의로 원하는 주소로 이동이 가능하다.

 

728x90

'Programming > assembly' 카테고리의 다른 글

어셈블리 문법  (0) 2020.03.01
echo  (0) 2020.03.01
메모리 구조  (0) 2020.03.01
Hello World (x64)  (0) 2020.03.01
어셈블리 기초(x86)  (0) 2020.03.01

+ Recent posts