为什么我的代码只能在windows xp 32bit系统上运行?[代码生成]

Why my code can only run on windows xp 32bit system?[code generation]

我正在尝试编写一个生成 x86 机器代码的程序,但代码只能在 32 位 winxp 上 运行。为什么在win7 64bit上显示"Unhandled exception at 0x776315ee in tiny.exe: 0xC0000005: Access violation."?

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

int main()
{
    char *code = (char *)malloc(1024);
    memset(code, 0, 1024);

    char opcode = 0xB8;
    memcpy(code, &opcode, sizeof(char));

    int oprand = 2;
    memcpy(code + sizeof(char), &oprand, sizeof(int));

    char opret = 0xC3;
    memcpy(code + sizeof(char) + sizeof(int), &opret, sizeof(char));

    typedef void (* func_t)(void);
    func_t func = (func_t)code;

    func();

    return 0;
}

堆上分配的内存受到保护,不能被 DEP. It might be disabled on your XP machine or it might be something else, but whatever the reason is: instead of malloc(), you have to call VirtualAlloc() with (at least) PAGE_EXECUTE_READWRITE 执行为 flProtect 以动态分配可以执行代码的内存。