1

我正在尝试write使用内联汇编程序(gcc 4.2.1,Mac OS 10.7.5)调用系统调用,代码编译成功,但根本没有任何输出。这是完整的代码:

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,而不是4for write

于 2012-10-06T18:39:33.150 回答