short 주소 앞에 0x66 Prefix가 붙으면

x86 어셈블리에서 Short Call (0xE8) 또는 Short Jump (0xEB) 앞에 0x66 Prefix가 붙으면

기존에 Short 방식으로 갈 수 없는 외계 행성?? 으로 갈 수 있다. ㅋㅋㅋ

왜냐면 66 Prefix가 오퍼랜드 크기를 줄여서 읽기 때문에 그런 것

#include <windows.h>

typedef DWORD (__stdcall *ZWALLOC)(HANDLE ProcessHandle,

ULONG *BaseAddress,

ULONG* ZeroBits,

PSIZE_T RegionSize,

ULONG AllocationType,

ULONG Protect);

int main()

{

ZWALLOC ZwAlloc;

ZwAlloc =

(ZWALLOC)GetProcAddress(GetModuleHandle("ntdll.dll"),
"ZwAllocateVirtualMemory");

ULONG addr = 1;

ULONG size = 0xFFFF;

ZwAlloc((HANDLE)0xffffffff, &addr, 0, &size,

MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

memset((PVOID)NULL, 0xC3, size);

BYTE code[] = {0x66, 0x6A, 0x00, 0x66, 0xE8, 0x00, 0x00, 0xC3};

addr = (ULONG)code;

__asm {

mov eax, addr

call eax

}

return 0;

}

</windows.h>

You might also like...

What do you think?