【发布时间】:2012-10-06 18:28:52
【问题描述】:
我正在尝试使用内联汇编程序(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 上成功运行。
谢谢!
【问题讨论】:
-
系统调用在 Linux 和 Mac OS X 上的编号不一定相同。您只需访问 Google 即可找到大量信息。这是一个描述将简单程序从 Linux 翻译到 Mac OS X 的链接:thexploit.com/secdev/mac-os-x-64-bit-assembly-system-calls
标签: macos gcc assembly inline-assembly