雑談中すみませんが質問です。

#include <stdio.h>

typedef unsigned int uint;
typedef unsigned char uchar;
extern int __stdcall VirtualProtect(void *, size_t, uint, uint *);

int main()
{
uchar x86[] = {
0x8B, 0x44, 0x24, 0x04, // mov eax, dword ptr [esp+4]
0x8B, 0x4C, 0x24, 0x08, // mov ecx, dword ptr [esp+8]
0x8B, 0x54, 0x24, 0x0C, // mov edx, dword ptr [esp+C]
0x0F, 0xAF, 0xC0, // imul eax, eax
0x0F, 0xAF, 0xC9, // imul ecx, ecx
0x0F, 0xAF, 0xD2, // imul edx, edx
0x03, 0xC1, // add eax, ecx
0x2B, 0xC2, // sub eax, edx
0xC3 // ret
};
uint dw;
fprintf(stdout, "%d\n", VirtualProtect(x86, sizeof(x86), 0x40, &dw)); //※ここ
fprintf(stdout, "%d\n", ((int (*)(int, int, int))x86)(3, 4, 5));
fprintf(stdout, "%d\n", ((int (*)(int, int, int))x86)(3, 3, 5));
return 0;
}

※ここ ← この行が無くても正常に実行出来てしまうのです。
実行時保護違反例外が出ると思ったのですが。><