2011-04-24 69 views
4

我這樣做沒有任何參數,只是一個基本的helloWorld的系統調用示例:參數傳遞到系統調用

int main() 
{ 
    syscall(__NR_helloWorld); 
    return 0; 
} 

但現在我想弄清楚如何實際參數傳遞給系統調用(即長)。我試過的格式是什麼:

int main() 
{ 
    long input = 1; 
    long result = syscall(__NR_someSysCall, long input, long); 
    return 0; 
} 

它在哪裏需要很長時間並返回一個很長的,但它沒有正確編譯;什麼是正確的語法?

回答

4

刪除類型名稱。這只是一個函數調用。例如:

#include <sys/syscall.h> 
#include <unistd.h> 

int main(int argc, char* argv[]) { 
    char* ptr = "boo\n"; 
    syscall(__NR_write, 1, ptr, 4); /* write syscall */ 
    return 0; 
} 
+0

1指的是#參數,但是4指的是什麼? – Jeff 2011-04-24 16:53:12

+2

不,'1' **是**參數 - 在這種情況下''stdout'文件描述符的編號,'4'是緩衝區的長度,如'write(FILENO_STDOUT,boo,4);' – 2011-04-24 16:58:13

+0

明白了, 謝謝! – Jeff 2011-04-24 17:16:36

1

原型爲syscall

#define _GNU_SOURCE  /* or _BSD_SOURCE or _SVID_SOURCE */ 
    #include <unistd.h> 
    #include <sys/syscall.h> /* For SYS_xxx definitions */ 

    int syscall(int number, ...); 

這表示它需要的參數的可變數目(和類型)。這取決於特定的系統調用。 syscall不是特定系統調用的正常接口。這些可以明確編碼,例如write(fd, buf, len)