我分配了一些空間,寫了一些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