http://x86.renejeschke.de/html/file_module_x86_id_147.html


후킹을 하다 보면 1 byte만으로 점프를 해야 하는 일이 생긴다.

주소값 4바이트를 포함한다는 가정 하에 총 5바이트만으로 점프해야 하는데, 이때 Opcode E9짜리 JMP를 사용한다.


사용법은 굉장히 단순한데, 1바이트 Opcode와 4바이트 주소를 써 주면 된다.

물론 주소는 리틀 엔디안으로 넣어야 한다.


하지만 유의할 점이 하나 있는데, E9를 사용한 JMP는 Local JMP이기 때문에 JMP 명령의 주소로부터 상대적인 거리로 점프한다는 것이다.

그래서 절대 주소로 점프하기를 원한다면 따로 계산을 해서 오퍼랜드에 넣어주어야 한다.


계산 공식은 다음과 같다.


(넣을 주소) = (점프할 주소) - (JMP 명령의 주소) - 5


뒤에 5 bytes를 빼주는 이유는 JMP Opcode (1 byte) + Operand (4 bytes) 로 총 5바이트가 더해지기 때문이다.



'Knowledge' 카테고리의 다른 글

멀티 태스킹(Multi-Tasking)의 원리  (0) 2016.11.21
PCB (Process Control Block)  (0) 2016.11.14
[Assembly] Intel x86, Local JMP [0xE9]  (0) 2016.11.07
[BigData] Spark 공부  (0) 2016.10.19
Visual Studio 2008에서 libcurl 사용하기  (0) 2016.09.05
RC4 Stream Cipher  (0) 2016.07.19
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

댓글을 달아 주세요