DWORD WINAPI subThread(LPVOID para) {

Sleep(2000);

CONTEXT ctx;

ctx.ContextFlags = CONTEXT_FULL;

HANDLE MainThreadHandle = OpenThread(THREAD_GET_CONTEXT | THREAD_SUSPEND_RESUME | THREAD_QUERY_INFORMATION, false, MainThread);

if (SuspendThread(MainThreadHandle) == -1) {

GetLastError();

}

if (!GetThreadContext(MainThreadHandle, &ctx)) {

printf("error");

DWORD ER = GetLastError();

getchar();

}

EIP = ctx.Eip;

printf("EIP:%p\n", EIP);

ResumeThread(MainThreadHandle);


return 0;

}

int main()

{


std::cout << "Hello World!\n";


MainThread= GetCurrentThreadId();


HANDLE H1 = CreateThread(0, 0, subThread, nullptr, 0, 0);

for (int i=0;i<7;i++) {

printf("wait..for %d\n",i);

Sleep(1000);

}

WaitForSingleObject(H1, INFINITE);






printf("hello!");


int num1 = 0x100;


__asm {

mov eax, num1;

jmp EIP;

}

}


여기서 EIP보면 for문이아니라 ntdll가르키는 이상한값이던데


이유가뭐임?