将参数传递给系统调用

发布于 2024-11-03 16:18:42 字数 422 浏览 3 评论 0原文

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

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

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

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

Where it take a long and returns a long,但它没有正确编译;正确的语法是什么?

I did a basic helloWorld system call example that had no parameters and was just:

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

But now I am trying to figure out how to pass actual arguments to the system call (ie. a long). What is the format exactly, I tried:

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

Where it takes a long and returns a long, but it is not compiling correctly; what is the correct syntax?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与往事干杯 2024-11-10 16:18:42

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

#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;
}

Remove the type names. It's just a function call. Example:

#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;
}
薄情伤 2024-11-10 16:18:42

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)

The prototype for syscall is

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

   int syscall(int number, ...);

This says that it takes a variable number (and type) of parameters. That depends on the particular system call. syscall is not the normal interface to a particular system call. Those can be explicitly coded, for example write(fd, buf, len).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文