반응형
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(상대주소)이라고 한다.
반응형
'옛날 글들 > Assembly' 카테고리의 다른 글
[Assembly] 6. inc, dec, add, sub, adc, sbb의 사용 (0) | 2018.12.03 |
---|---|
[Assembly] 5. 조건분기 JUMP문 정리 (0) | 2018.12.02 |
[Assembly] 4. CMP의 사용과 상태 플래그 (0) | 2018.11.29 |
[Assembly] 2. 메모리의 사용과 포인터 사용 (0) | 2018.10.30 |
[Assembly] 1. mov 명령어 (0) | 2018.10.24 |