我知道要加载.so,必须设置e'x'ecute位。但是,我想知道+ s(setuid)位对.so有什么影响? 如果主程序未设置“ setuid”,但是加载的.so是setuid,是否会更改uid?我发现没有,但是很高兴得到一些解释。
$ cat a.c
# include <stdio.h>
extern void func();
void main()
{
func();
}
$ cat b.c
# include <stdio.h>
# include <unistd.h>
void func()
{
printf("UID %d",geteuid());
}
gcc --shared -o libb.so ./b.c
sudo chown root: libb.so ; sudo chmod +s ./libb.so
gcc a.c -L. -Wl,-R. -lb
没有任何区别(就像.so中的setuid被忽略一样)。