我試圖用內聯彙編程序(gcc 4.2.1,Mac OS 10.7.5)調用系統調用write
代碼編譯成功,但沒有根本沒有任何產出。這是完整的代碼:未能用gcc內聯彙編程序調用系統調用(64位)
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:http://thexploit.com/secdev/mac-os-x-64-bit-assembly-system-calls/ –