1

私は Intel MacOSX 10.6 を使用しており、内部では GCC 4.2.1 を使用しています。私がやろうとしているのは、バッファを割り当て、マシン命令を入力して実行することです。すべてを 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

メモリはコード実行に対して「安全」であるとは見なされないため、オペレーティング システムによって実行が防止されます。

を使用mmap()してメモリを割り当てる方法を調べ、 を使用しPROT_EXECてメモリを実行可能にするように要求します。

于 2013-02-07T15:06:21.810 に答える