Win32API質問箱 Build116
■ このスレッドは過去ログ倉庫に格納されています
0666デフォルトの名無しさん
2014/02/03(月) 13:03:37.10{
uchar *code;
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;
int i;
code = (uchar *)VirtualAlloc(0, sizeof(x86), MEM_COMMIT, PAGE_READONLY);
fprintf(stdout, "%d\n", VirtualProtect(code, sizeof(x86), PAGE_READWRITE, &dw));
for(i = 0; i < sizeof(x86); ++i) code[i] = x86[i];
fprintf(stdout, "%d\n", VirtualProtect(code, sizeof(x86), PAGE_READONLY, &dw));
fprintf(stdout, "%d\n", ((int (*)(int, int, int))code)(3, 4, 5));
fprintf(stdout, "%d\n", ((int (*)(int, int, int))code)(3, 3, 5));
VirtualFree(code, 0, MEM_RELEASE);
return 0;
}
READONLY(EXECUTEなし)でも動きました。本当にありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています