본문으로 바로가기

[Assembly] 3. JMP의 사용

category 공부/Assembly 2018.11.29 12:36
JMP는 C언어의 GOTO문과 동일하게 위치를 지정하여 그 위치로 이동한다.
사용을 할때에는 JMP "크기" "메모리 주소"의 꼴로 사용한다.

1
JMP short 00401000
cs

레지스터 중 EIP 레지스터는 컴퓨터가 다음으로 이동할 메모리의 주소를 가지고 있다. JMP문이 실행되면 이 EIP 레지스터의 값이 바뀐다.
말하자면 JMP 명령어는 EIP 레지스터에 주소 값을 넣는 명령어인 것이다.

EIP 레지스터는 mov 명령어로 수정할 수 없고, JMP 명령어로만 수정이 가능하다.

"JMP short 00401005" 명령어의 기계어를 보면 "EB 00401005"가 아닌 "EB F4"로 작성되어 있다. 왜 그럴까?
00401005라는 값을 모두 담기에는 용량이 아까우니 EIP 레지스터 값과 점프할 곳의 차를 EIP에 더해주는 방식을 사용하는 것이다. 이걸 offset(상대주소)이라고 한다.



댓글을 달아 주세요