我坐在 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;
}
失败并显示消息总线错误。我在这里做错了什么?
最佳答案
内存对于代码执行来说不被认为是“安全的”,因此操作系统会阻止它。
考虑使用 mmap()
分配内存,并使用 PROT_EXEC
请求内存可执行。
关于c++ - 在运行时生成机器指令的世界代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14754266/