2015-10-19 20 views
1

我正在試圖獲得通過內聯彙編在C.做作爲關我的工作方法在我的Linux X64系統調用系統調用的實現,我想弄清楚,這是如何做到的glibc。我發現,在/misc/syscall.c在glibc的

long int 
syscall (callno) 
    long int callno; 
{ 
    __set_errno (ENOSYS); 
    return -1; 
} 

下面我不得不說我是新的C(我是一個Java開發人員),所以我不明白這裏的語法。

我的問題有以下幾點:

  1. 它是正確的,我可以的參數,這樣在括號中的列表之後寫的函數參數的聲明:

    無效美孚(酒吧) long int bar; {// 功能代碼 }

  2. 我怎樣才能找到在glibc的系統調用的彙編程序的實際執行? (不需要是正確的位置,任何暗示讚賞)

+2

您的第一個問題:http://stackoverflow.com/questions/1585390/c-function-syntax-parameter-types-declared-after-parameter-list – 2015-10-19 17:47:50

+1

1.是的,但不推薦使用。它用於K&R第1版。 – Downvoter

+0

注意,[當前的glibc源(https://sourceware.org/git/?p=glibc.git;a=blob;f=misc/syscall.c;h=f8237365f2e61e6a7d684c2a534e6ff3b8001fc8;hb=HEAD)使用現代參數聲明。 – Kninnug

回答

1

系統調用不是由glibc唯一定義的源代碼。 glibc的創建通過這個shell腳本在運行中的系統調用的語法:/sysdeps/unix/make-syscalls.sh。該腳本使用適用於相關操作系統的syscalls.list文件。此外,還有一些關於體系結構的文件來確定捕獲到內核的正確操作碼。例如。 X86_64定義「系統調用」操作碼跳轉到內核(見the sysdep.h for X86_64)。