mov rcx,rdx
(https://defuse.ca/online-x86-assembler.htm 사용)을 인코딩하는 x86_64 인코딩은 48 89 D1
입니다.x86_64 - mov 명령어 인코딩
this reference으로 연산 코드를 검사하면 바이트 시퀀스가 명령을 인코딩하는 방법을 알 수 있습니다.
그러나이 테이블의 두 행 아래 (op-code 8B
)는 매우 비슷한 mov
명령어이지만 피연산자 순서는 바뀌 었습니다.
사실 디코 더링을 통해 확인 된 48 8b ca
을 사용하여 동일한 명령어를 인코딩 할 수 있습니다.
왜 두 연산 코드가 모두 존재합니까? 그들이 운동 할 수있는 것보다 더 많이 다른가요? 언제 다른 하나를 골라야합니까?
메모리 피연산자가 소스 또는 대상이 될 수 있도록하기 위해 존재합니다. 둘 다 레지스터이면 두 개의 인코딩을 얻습니다. 어떤 어셈블러가 어셈블러에 의존하는지에 따라 선택되며, 일부는 지정할 수 있습니다 (예 : '.s'접미어). – Jester