首页 文章

将参数传递给系统调用

提问于
浏览
5

我做了一个没有参数的基本helloWorld系统调用示例,只是:

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

但现在我想弄清楚如何将实际参数传递给系统调用(即 long ) . 我试过的格式是什么:

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

它需要 long 并返回 long ,但它没有正确编译;什么是正确的语法?

2 回答

  • 1

    删除类型名称 . 这只是一个函数调用 . 例:

    #include <sys/syscall.h>
    #include <unistd.h>
    
    int main( int argc, char* argv[] ) {
        char str[] = "boo\n";
        syscall( __NR_write, STDOUT_FILENO, str, sizeof(str) - 1 );
        return 0;
    }
    
  • 4

    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) .

相关问题