Gdb 故障排除错误的文件权限
我有一个创建日志文件的进程,文件权限为644。但是,当我使用LD_PRELOAD运行加载特定共享对象库的过程时,文件权限设置为2101(特别是设置了setgid权限)。我没有创建进程的程序的源代码,但是我有.so文件的源代码。我确信文件权限是加载.so文件的结果,因为当我为创建文件的程序(我编写的)加载.so文件时,文件权限设置了setuid/setgid位。我尝试在我编写的程序中使用gdb,但我无法单步完成代码。我只是在使用gdb加载的.so文件启动程序时,出现了一个分段错误。如何解决此问题?我没有看到在.so文件的源代码中设置任何文件权限。我写的程序很简单,看起来像这样-Gdb 故障排除错误的文件权限,gdb,shared-libraries,file-permissions,Gdb,Shared Libraries,File Permissions,我有一个创建日志文件的进程,文件权限为644。但是,当我使用LD_PRELOAD运行加载特定共享对象库的过程时,文件权限设置为2101(特别是设置了setgid权限)。我没有创建进程的程序的源代码,但是我有.so文件的源代码。我确信文件权限是加载.so文件的结果,因为当我为创建文件的程序(我编写的)加载.so文件时,文件权限设置了setuid/setgid位。我尝试在我编写的程序中使用gdb,但我无法单步完成代码。我只是在使用gdb加载的.so文件启动程序时,出现了一个分段错误。如何解决此问题?
#include <stdio.h>
int main(){
printf(" This is my program");
system("touch /tmp/myfile.txt");
return(0);
}
#包括
int main(){
printf(“这是我的程序”);
系统(“touch/tmp/myfile.txt”);
返回(0);
}
我没有看到在.so文件的源代码中设置任何文件权限
您的.so
是否插入打开
使用“随机”权限创建文件的一种方法是(不正确地)插入打开
,如下所示:
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可能也不喜欢它的打开
插入错误。再澄清一点,正确的插入方法是编写一个包装函数?@user4002112我不确定你在问什么。如果要编写插入器,则需要正确编写。在open
的情况下,它需要3个参数,而不是2个。你是对的,我以前没有编写过插入器,但我找到了解决方案,我所需要的只是在处理程序的定义中为权限添加一个附加参数。