我做了一个没有参数的基本helloWorld系统调用示例,只是:
int main()
{
syscall(__NR_helloWorld);
return 0;
}
但是现在我想弄清楚如何将实际参数传递给系统调用(即a long
)。究竟是什么格式,我试过:
int main()
{
long input = 1;
long result = syscall(__NR_someSysCall, long input, long);
return 0;
}
long
所需的位置并返回long
,但未正确编译;什么是正确的语法?
答案 0 :(得分:4)
删除类型名称。这只是一个函数调用。例如:
#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;
}
答案 1 :(得分:2)
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)
。