함수의 시작 부분을 JMP 명령어로 바꾸어 함수에 연결하려고합니다. 하지만 문제는 내 함수의 주소를 대상으로 JMP 오프셋을 계산하는 방법을 모르겠다는 것입니다. 글쎄, 만약 당신이 메모리 (Destr addr - Current addr)에서 앞으로 뛰어 내리면 그것을하는 방법을 안다.하지만 나는 당신이 메모리에서 뛰어 내릴 때 그것을 결정하는 방법을 모른다.JMP 명령어 주소 계산하기
누군가 도움이 될까요?
함수의 시작 부분을 JMP 명령어로 바꾸어 함수에 연결하려고합니다. 하지만 문제는 내 함수의 주소를 대상으로 JMP 오프셋을 계산하는 방법을 모르겠다는 것입니다. 글쎄, 만약 당신이 메모리 (Destr addr - Current addr)에서 앞으로 뛰어 내리면 그것을하는 방법을 안다.하지만 나는 당신이 메모리에서 뛰어 내릴 때 그것을 결정하는 방법을 모른다.JMP 명령어 주소 계산하기
누군가 도움이 될까요?
상대 점프가 서명됩니다. 즉, 부호 비트를 사용하여 양수 및 음수 변위가 지정됩니다. 절대 점프는 절대적이므로 절대 중요하지 않습니다. 양 지침서의 2A & 2B 양을보십시오.
이것은 알아낼 수 있어야하는 기본적인 수학입니다. :) JMP의 기대가 Destination - Origin
경우
은 다음 JMP
뒤로 Origin - Destination
일반 번호에 대해 생각 될 것이다 : 당신이 100에서 110으로 앞으로 JMP
하려는 경우, JMP
는 110 - 100 = 10
될 것이다. 같은 금액을 뒤로 JMP
으로 지정하려면 100 - 110 = -10
이됩니다.
역방향으로 점프하려면 음수 오프셋을 사용하십시오.
JMP
명령어의 크기를 기억해야합니다. 오프셋은 시작이 아니라 JMP
명령어의 끝을 기준으로합니다. 현재 주소가 JMP
을 작성하려고하는 곳이면 JMP
명령어의 크기에 5 바이트의 오프셋을 더한 이후 5 + dest-current의 오프셋이 필요합니다.
이 함수 위의 위치에 더미 전화 걸기 몰래
을 수
call location1
.location1
call location2
.location2
pop ax
ret
.yourfunction
이제 도끼 3을 추가 도끼
에서 LOCATION2의 주소를 가지고 있고 메모리 주소를 당신의 기능 중
아니, 아니, 나는 앞으로 어떻게 뛰어날 지 압니다. 문제는 다음과 같이 계산하여 16 진수로 표현하는 방법을 잘 모르겠습니다. 예를 들어 주소 1000에서 2000으로 이동하려면 "E9 3E8"이되지만 2000에서 1000으로 점프하려면 어떻게해야합니까? "E9 FFFFFFFFFFFFFC18"같은 끔찍한 것이 있습니까? – user972948
코드 –
에서 계산을하십시오. 16 진수는 다릅니다. 내 예제를 '100'에서 '0x100', '110'에서 '0x110'으로 변경하면 수학은 동일합니다. –