본문 바로가기

Revere Engineering/Assembler

먼 거리로 강제 점프~

 아래와 같이 조건부 점프가 이다고 가정 할때...

점프할 거리가 멀지 않고...일반적으로 점프를 할지 말지를 고민 하는데..

한단계 더 나가서...지정된 주조가 아닌 먼 곳으로 강제 점프를 하고 싶은 경우가 있다..

롱점프 하는 루틴을 셈플로 보면...

헥사 코드로 E9 로 시작 하고 뒤에 4바이트는 점프할 거리이다.

거리 계산은 jmp 아래 주소 부터 목적지 까지의 거리의 헥사 값이다.

계산식은 간단 하다..

목표 지점 주소인 00459948 에서 jmp 다음 주소인 00459484 를 빼주면... 04C5 가 된다...

 

 

 

 

 

다시 원 코드로 돌아와서....

목표 지점이 출발 지점 주소가 0045942E이고..

 

목표 주소가 004599BF 이니..

004599BF  - 0045942E = 0591 이 된다...

 

이제 수정할 조건부 점프 부분을 찾아서....

조건부 점프 대신 점프의 헥사 코드인 E9를 쳐주고.. 뒤에 점프할 위치(0591)를 쳐줘야 하는데..

헥사코드 입력은 1바이트 씩 잘라서 꺼꾸로... 0591 이니... 9105 로 입력 한다... 그리고 4바이트 이니...0000을 붙여 준다.

명령어 까지 하면 74 56 -> E9 9105 0000 가 된다.

그냥 참고 하세요~

'Revere Engineering > Assembler' 카테고리의 다른 글

어셈블러 명령어 - 분기  (0) 2008.07.01
Assembler 명령어 정리  (1) 2008.04.04