안 쓰던 블로그

스택과 SFP와 RET 본문

CTF/Pwnable

스택과 SFP와 RET

proqk 2020. 10. 13. 13:14
반응형

스택 영역(스택 프레임)

프로그램 실행 중 만들어지는 지역변수나 매개변수가 쌓이는 메모리 공간 (참고: 메모리 구조 foxtrotin.tistory.com/312 )

 

특징

리틀 엔디안 방식으로 저장되므로 하위 바이트부터 먼저 들어간다

 

스택 기본 구조

Buffer + sfp[4byte] + ret[4byte]

 

1) 버퍼는 데이터가 저장되는 공간이다

 

2) sfp는 스택 베이스값을 뜻한다

sfp는 스택 주소값을 계산할 때 현재 스택값의 기준을 잡을 때 필요한 프레임 포인터 값을 저장한다. 크기는 4바이트이다

 

sfp가 필요한 이유

ebp레지스터는 한 개이기 때문에 함수가 시작할 때마다 ebp값이 바뀌는데 그 전의 ebp값을 스택에다가 저장해야 하기 때문이다

 

3) ret 은 return의 약자로 반환 주소값을 뜻한다

 

ret가 필요한 이유

다음에 실행해야 하는 명령이 위치한 메모리 주소값이 ret이기 때문이다. 그렇기 때문에 ret부분을 자기가 원하는 명령이 있는 곳의 메모리 주소로 덮어 쓴다면 자기가 원하는 명령을 실행시켜 버릴 수도 있다. 예를 들어 쉘을 실행하는 코드를 저장한 뒤에 그 메모리 주소를 ret부분에 쓰면 함수 종료 후에 쉘을 실행시키게 된다

 

이 값이 eip값으로 변하고 다음 주소가 실행이 된다

 

 

 

반응형

'CTF > Pwnable' 카테고리의 다른 글

32bit와 64bit - x86과 x64 비교  (0) 2020.10.13
레지스터  (0) 2020.10.13
pwntools을 이용한 문제 풀이-double pistol  (0) 2020.09.15
pwntool을 이용한 문제 풀이  (0) 2020.09.15
pwntools 기본 사용법  (0) 2020.09.15
Comments