RET 2

메모리 스택(Stack)영역

스택에 대해 알아보자. 알고 있을진 모르겠지만 스택의 역할은 뭐.. 로컬 변수 임시 저장, 함수 호출 시 파라미터 전달, 리턴 어드레스 저장 등이 있다. 구조는 후입선출이다. Last In First Out 가장 마지막에 넣은 녀석부터 다시 튀어나온다는 것. (POP연산을 한다고해서 튀어나온다고 표현을 했는데 실제로는 그 값은 살아 있지만 후에 나올 esp가 pop연산을 만나면 자동으로 4바이트 아래로 내리기 때문에 튀어나오는 것 처럼 보이는거.) 스택은 메모리에 높은 주소 쌓이는 이유는 힙과 마주보며 쌓이면서 메모리를 좀더 효율적으로 사용할 수 있도록 하기 위해서 이렇게 설계되었다고 하는데 구체적인 이유가 2가지 정도 있다. 1. 높은 주소부터 거꾸로 스택을 채워나가면 스택영역이 커널영역에 침범할 일이..

어셈블리어 - CALL / JMP / RET

ADD, SUB, INC 등의 보면 딱 알 수 있는 명령어에 대한 포스팅은 안하겠음. CALL, JMP, RET 는 중요하니까 해야지. CALL : 프로시저를 호출하는 명령이다. 프로시저? 바로 함수를 이야기하는 것임. CALL과 JMP의 차이는 RET다. 너무 두루뭉술한 말이구나 내가 적어놓고도. CALL은 호출되고 난 후에 이전에 실행중이던 프로시져로 복귀를 해야하고 JMP는 그럴 필요가 없다. 즉, RET명령이 필요없다는 것 CALL을 이용하여 호출하면 "프롤로그" 과정부터 수행해야한다. 지금껏 분석하면서 프롤로그는 많이 보았을 터임. ESP레지스터를 EBP에 저장하여 복귀지점을 기록하는 것이다. 그리고 처음에 스택 공간을 할당한 것은.. 그 함수가 사용하는 매개변수가 잇을 때. 호출 한 후 복귀할..

반응형