我有一个创建日志文件的进程,文件权限为644.但是,当我运行使用LD_PRELOAD加载特定共享对象库的进程时,文件权限设置为2101(特别是设置了setgid权限)。我没有创建进程的程序的源代码,但我确实有.so文件的源代码。我确定文件权限是加载.so文件的结果,因为当我为创建文件的程序(我写的)加载.so文件时,文件权限设置了setuid / setgid位。我尝试将gdb用于我编写的程序,但我无法单步执行代码。我在使用gdb加载的.so文件启动程序的那一刻就得到了一个分段错误错误。我该如何解决这个问题?我没有看到.so文件的源代码中设置了任何文件权限。我写的程序非常简单,它看起来像这样 -
#include <stdio.h>
int main(){
printf(" This is my program");
system("touch /tmp/myfile.txt");
return(0);
}
答案 0 :(得分:0)
我没有在.so文件的源代码中看到任何文件权限。
您的.so
是否介入open
?
使用&#34;随机&#34;创建文件的一种方法权限是(错误地)插入open
,如下所示:
int open(const char *fname, int flags)
{
... do whatever
return real_open(fname, flags); // problem: omits 3rd argument to open
// and passes "garbage" permissions when
// O_CREATE is in flags.
}
我在使用gdb加载的.so文件启动程序的那一刻就出现了分段错误错误。
当GDB运行你的程序时,它会调用$SHELL
(以处理任何输入/输出重定向)。您的shell可能不会错误地插入open
。