c++ - 在运行时生成机器指令的世界代码?

标签 c++ c assembly

我坐在 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/

相关文章:

c++ - 套接字 : send() function returned 'Broken Pipe' error

c - 在哪里注入(inject)代码以打印 ffmpeg lib 内的运动 vector 和 DC 系数

c - C 中的函数声明和结构声明

testing - 如何测试 Bit-Banged 通信的汇编例程

通过平面 assembly 中的过程对列表进行排序

c++ - C++标准库有UTF-8函数吗?

c++ - QML 引擎没有隐式地将 bool-string QVarient 转换为 bool 属性

c++ - signal.h 是捕获空指针的可靠方法吗?

c - 如何使用 SWIG 创建带有可选参数的 TCL 函数?

assembly - 将单词的每个字符替换为该单词中大写字符的数量