Я знаю, что для загрузки .so, бит e'x'ecute должен быть установлен.Тем не менее, мне интересно, как влияет бит + s (setuid) на .so?Если основная программа не настроена на «setuid», а загружаемый файл .so установлен, то изменяет ли 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
, которое не делает ничего другого (как-будто setuid в .so игнорируется).