Stack 메모리, push, pop 명령어

스택 자료구조는 LIFO(Last in First Out) 구조로 마지막에 들어간 값이 가장 먼저 나오는 구조를 갖고 있다. CPU는 PUSH, POP어셈블리어 명령어와 esp, ebp 레지스터를 이용해서 스택을 관리하고 스택에는 지역변수와 임시 데이터들이 저장된다. EBP는 스택에서 가장 낮은 바닥(bottom)의 주소를 갖고 있고 ESP 는 스택 꼭대기인 탑(top)의 주소를 갖고 있다.



PUSH 명령어는 ESP위에 값을 넣고 ESP가 새로운 값을 가리키게 만든다(그림 상 한칸 올라간다).
POP명령어는 ESP가 가리키는 값을 스택에서 빼고 ESP를 한 칸(4byte) 내린다.

PUSH 0x1010명령어가 실행되면 esp는 한 칸 위로 올라가고(주소는 4byte 감소) 그 곳에 0x1010이 들어간다.위의 그림에서 PUSH 0x1010이 실행되면 ESP는 low address가 적혀있는 곳을 가리키게 되고 그 안에는 0x1010의 값이 들어간다.

POP명령어의 operand는 한 개고 레지스터가 오게 된다. POP eax가 실행되면 ESP가 가리키고 있는 DATA가 eax에 저장되고 ESP는 한 칸(4Byte) 내려온다. 위의 그림에서 POP eax가 실행되면 DATA1 (TOP)이 eax에 저장되고 ESP는 DATA2를 가리키게 된다.

0 개의 댓글:

댓글 쓰기