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가르키는 이상한값이던데
이유가뭐임?
댓글 0