[작성중] 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
함수 호출 시 환경에 관계없이 동작하는 윈도우즈 쉘코드 동작에 필요해서 써둠.
함수 주소가 계속 바뀌어대는 통에