Mac系统调用错误

时间:2017-12-25 01:42:46

标签: macos assembly system-calls inline-assembly

如果我写信给终端在Mac上执行write系统调用,它会成功:

int main() {
    long SYS_WRITE = 0x2000004;
    long STDOUT = 1;

    long result;
    char* str = "Hello world";

    __asm__ __volatile__ (
        "syscall;\n"
        : "=a" (result)
        : "a" (SYS_WRITE), "D" (STDOUT), "S" (str), "d" (10)
        :
    );

    std::cout << result << endl;

    return 0;
}

它打印到控制台“Hello world”并按预期返回10

但是,如果我尝试故意出现错误,例如,将9999设置为文件描述符(不存在):

int main() {
    long SYS_WRITE = 0x2000004;
    long STDOUT = 1;

    long result;
    char* str = "Hello world";

    __asm__ __volatile__ (
        "syscall;\n"
        : "=a" (result)
        : "a" (SYS_WRITE), "D" (9999), "S" (str), "d" (10)
        :
    );

    std::cout << result << endl;

    return 0;
}

返回9,对应EBADFD错误,这是正常的,但结果不是负数。我希望错误结果是否定的,在Linux上它是负面的。

在Mac上,我怎么知道syscall返回了错误?

0 个答案:

没有答案