본문 바로가기
Programming/Hacking & Security

[Reversing] Call, Jmp By 용호

by ★용호★ 2010. 5. 21.

2010년 5월 18일 화요일

Call과 Jmp는 프로그램의 흐름을 변경할 수 있는 명령어, 즉 , EIP값을 변경하는 명령어이다.
두 명령어의 차이점은 RET의 유무이며 Call에는 RET가 있고 Jmp에는 없다.
Jmp는 단독으로 수행되는 경우는 드물고 cmp(sub연산)와 test(and연산) 명령 이후에 사용된다.

#차이점
1. Call은 EIP 값을 변경하기 전에 스택에 백업을 해 두는 반면 JMP는 백업하지 않고 바로 변경
2. Call은 조건 분기 가능한 명령어 형태가 존재하지 않으나 JMP는 조건 분기 가능한 명령어 형태가 존재한다.
   ex) JZ(=JE), JNZ, JA, JB, JG, JL etc ...


아래와 같은 코드에서 call이 수행되면 해당 함수로 이동한다.
sumproc 부분을 수행 하고 수행이 완료되면 스택에 저장되어있던 EIP값을 보고 해당 주소부터 다시 시작한다.





아래 코드에서는 call을 하기 전에 push를 해주게 되는데 이것이 바로 매개변수(call by value) 이다.




아래의 코드에서는 주소값을 복사하여 매개변수로 넘겨주는 call by reference를 보여준다.




▶ 코드파일



댓글