아래와 같이 조건부 점프가 이다고 가정 할때...
점프할 거리가 멀지 않고...일반적으로 점프를 할지 말지를 고민 하는데..
한단계 더 나가서...지정된 주조가 아닌 먼 곳으로 강제 점프를 하고 싶은 경우가 있다..
롱점프 하는 루틴을 셈플로 보면...
헥사 코드로 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 |