본문 바로가기

Research/Writting

[작성중] JMP Absolute | Relative






E9 xxxxxxxx

FF E0

FF 25 



E8 == > relative call


absolute CALL 

FF 15 ==> 포인터 참조

FF 16




__asm

{

call dword ptr [eax]

}


이런 식의 구현에서 call dword ptr [eax] 는 FF 90 00000000 로 표현된다.


FF 90 01000000 이었으면 call dword ptr [eax+1] 이고,

절대 주소를 사용하지 않는다.



jmp + label 형태로.


__asm

{

push label2

mov eax, 0x004030FC // call function addr

mov eax, [eax]

jmp eax

label2:

add esp,8 

}


여기선 label 2 때문에 절대 주소를 사용해야 한다.


004019CD 68 DB 19 40 00       push        offset label2 (4019DBh)  

004019D2 B8 FC 30 40 00       mov         eax,offset __imp__calloc (4030FCh)  

004019D7 8B 00                mov         eax,dword ptr [eax]  

004019D9 FF E0                jmp         eax  

label2:

004019DB 83 C4 08             add         esp,8  

004019DE 89 45 F4             mov         dword ptr [_Out],eax  





함수 호출 시 환경에 관계없이 동작하는 윈도우즈 쉘코드 동작에 필요해서 써둠.

함수 주소가 계속 바뀌어대는 통에