我分配了一些空间,写了一些asm并试图在那一刻开始一个线程。 但我不断收到访问冲突。它假设推四个0并调用messageboxa函数。但是在区域地址,它会发生访问违规。 如何让它像普通代码一样运行?C++动态线程
void test2()
{
byte* area;
HANDLE process;
area = new byte[1024];
for(int i = 0; i < 1024; i++)
area[i] = 0;
memmove((char*)area, "\x6a\x00\x6a\x00\x6a\x00\x6a\x00\xE8", 9);
*(DWORD*)&area[9] = ((DWORD)GetProcAddress(GetModuleHandle("User32.dll"), "MessageBoxA") - (DWORD)&area[9] - 4);
memmove((char*)&area[13], "\x33\xc0\xc3", 3);
VirtualProtect(area, 17, PAGE_EXECUTE_READWRITE, 0);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)area, 0, 0, 0);
}
这里的拆卸 http://screensnapr.com/v/P33NsH.png
也许试试'PAGE_EXECUTE_READ'。 –
您能从获得访问冲突的地方获得堆栈跟踪吗?它是在汇编代码中,还是在调用CreateThread的时候? –
它来自第一次推送的地址,而不是来自创建线程的调用 – Drake