スペースを割り当て、いくつかのasmを書き、その時点でスレッドを開始しようとしました。 しかし、私はアクセス違反を受けています。 4つの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);
}
が
VirtualProtect()
呼び出し、この場合には何もしません
http://screensnapr.com/v/P33NsH.png
恐らく 'PAGE_EXECUTE_READ'を試してください。 –
アクセス違反が発生した時点からスタックトレースを取得できますか?アセンブリコード内にありますか、またはCreateThreadを呼び出す時点ですか? –
スレッドを作成する呼び出しからではなく、最初のプッシュのアドレスから – Drake