1

インライン アセンブラ (gcc 4.2.1、Mac OS 10.7.5)でシステム コールを呼び出そうとしていますwriteが、コードは正常にコンパイルされますが、出力がまったくありません。これは完全なコードです:

int main()
{
    char s[] = "Test\n";
    // write(1, s, 5);
    asm(
        "movq $1, %%rax;"
        "movq $1, %%rdi;"
        "movq %0, %%rsi;"
        "movq $5, %%rdx;"
        "syscall;"
        :
        : "r"(s)
        : "%rax", "%rdi", "%rsi", "%rdx"
    );
}

gcc でコンパイルします。

$ gcc main.c -o test

走る:

$ ./test

Xcode 4.5 デバッガーでコードを実行すると、次のエラーが発生します。

Thread 1: EXC_SYSCALL (code=1, subcode=0x1)

コードの何が問題になっていますか? Ubuntu 12.04 LTS で問題なく動作します。

ありがとう!

4

1 に答える 1

3

上記のコメントで述べたように、システム コール番号が異なります。このプログラムを Mac OS X で動作させるには0x2000004、入力する必要があります。%rax

あなたのプログラムが Ubuntu でどのように機能するかはよくexitわかりませ1ん。4write

于 2012-10-06T18:39:33.150 に答える