IT 그리고 정보보안/Knowledge base

어셈블리어 - CALL / JMP / RET

plummmm 2021. 4. 17. 10:23
반응형

ADD, SUB, INC 등의 보면 딱 알 수 있는 명령어에 대한 포스팅은 안하겠음.
CALL, JMP, RET 는 중요하니까 해야지.
 

CALL : 프로시저를 호출하는 명령이다. 프로시저? 바로 함수를 이야기하는 것임.
CALL과 JMP의 차이는 RET다.
너무 두루뭉술한 말이구나 내가 적어놓고도.

CALL은 호출되고 난 후에 이전에 실행중이던 프로시져로 복귀를 해야하고
JMP는 그럴 필요가 없다. 즉, RET명령이 필요없다는 것
 

CALL을 이용하여 호출하면 "프롤로그" 과정부터 수행해야한다.
지금껏 분석하면서 프롤로그는 많이 보았을 터임.
ESP레지스터를 EBP에 저장하여 복귀지점을 기록하는 것이다.
그리고 처음에 스택 공간을 할당한 것은.. 그 함수가 사용하는 매개변수가 잇을 때.
 
호출 한 후 복귀할 때 사용하는 것이 바로 RET명령이다.
RET 8h 라고 하면 8만큼의 스택을 비우고 복귀하라 이말.

반면 JMP는 프롤로그 과정을 거칠 필요가 없지.
단지 프로그램의 실행 흐름을 바꾸는 역할이라고 보면 된다.

반응형