1

我坐在 Intel MacOSX 10.6 上并在引擎盖下使用 GCC 4.2.1。我试图做的是分配一个缓冲区,用机器指令填充它,然后运行它。全部在一个程序中。

例如,

typedef unsigned char byte_t;

int main(int argc, char** argv) {
    byte_t* code = new byte_t[3];
    code[0] = 0x90; // NOP
    code[1] = 0xC9; // LEAVE - tried also without this.
    code[2] = 0xCB; // RET far - tried also 0xC3, the near return.
    ((void (*)(void)) code)();
    return 0;
}

失败并显示消息Bus error。我在这里做错了什么?

4

1 回答 1

5

对于代码执行,内存不被认为是“安全的”,因此操作系统会阻止它。

查看 usingmmap()分配内存,并使用PROT_EXEC请求使内存可执行。

于 2013-02-07T15:06:21.810 回答