如何使用c syscall包装器?

时间:2017-09-28 17:02:11

标签: c linux gcc

我尝试创建一个较小版本的hello world。

#define _GNU_SOURCE
#include<unistd.h>

void _start()
{
  syscall(SYS_write, 1, "Hello, World!\n", 14);
  syscall(SYS_exit, 0);
}

如果我尝试gcc -Wall -g -s -O3 hworld.c -o hello7 -nostartfiles,此代码正常运行。我想得到一个较小版本的hello world。所以,我尝试使用-nostdlib。它不起作用,如果我尝试使用gcc -Wall -Os -nostdlib -o hello7 hworld.c它会给我错误。

hworld.c: In function ‘_start’:
hworld.c:7:11: error: ‘SYS_write’ undeclared (first use in this function)
  syscall(SYS_write, 1, "Hello, World!\n", 14);
       ^
hworld.c:7:11: note: each undeclared identifier is reported only once for each function it appears in
hworld.c:8:11: error: ‘SYS_exit’ undeclared (first use in this function)
   syscall(SYS_exit, 0);

I try to use #include<sys/syscall.h> It gives me other errors.

hworld.c:(.text+0x18): undefined reference to `syscall'
hworld.c:(.text+0x27): undefined reference to `syscall'
collect2: error: ld returned 1 exit status

我了解到我需要使用系统调用包装器。它叫libc.a。它位于/usr/lib/x86_64-redhat-linux6E/lib64/libc.a 如何使用此包装器来解决错误?请帮帮我。

1 个答案:

答案 0 :(得分:0)

这在RHEL 6.10上可以正常工作:

holder.getAdapterPosition()