我想使用系统调用来获取当前用户的id。我这样试过:
#include <unistd.h>
#include <sys/syscall.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
int uid = syscall(SYS_getuid);
printf("%d\n", uid);
return 0;
}
我用root执行了它,但它打印出来了
-1
而不是
0
.
如果我将其替换为
int uid = syscall(SYS_getuid);
,则它正确地返回
0
。我做错了什么?如何使用获取当前用户id
syscall
?
我在上面运行
i686/ubuntu
docker镜像,因为我必须创建32位可执行文件。
可重复性最小的示例:
Dockerfile
FROM i686/ubuntu
RUN apt-get update
RUN apt-get install --assume-yes --no-install-recommends --quiet \
gcc libc6-dev
RUN apt-get clean all
主要的c
#include <unistd.h>
#include <sys/syscall.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
int uid = syscall(SYS_getuid);//getuid();//
if(uid == -1)
printf("Error: %s\n", strerror(errno));
printf("%d\n", uid);
return 0;
}
运行(在x64 Windows10上):
docker build --platform linux/386 -t my-gcc .
docker run --platform linux/386 --rm -v ${pwd}:/usr/local/src/:rw my-gcc gcc -m32 -xc /usr/local/src/main.c -o /usr/local/src/main
docker run --platform linux/386 --rm -v ${pwd}:/usr/local/src/:rw my-gcc /usr/local/src/main
结果是:
Error: Function not implemented
-1