Gdb 故障排除错误的文件权限

Gdb 故障排除错误的文件权限,gdb,shared-libraries,file-permissions,Gdb,Shared Libraries,File Permissions,我有一个创建日志文件的进程,文件权限为644。但是,当我使用LD_PRELOAD运行加载特定共享对象库的过程时,文件权限设置为2101(特别是设置了setgid权限)。我没有创建进程的程序的源代码,但是我有.so文件的源代码。我确信文件权限是加载.so文件的结果,因为当我为创建文件的程序(我编写的)加载.so文件时,文件权限设置了setuid/setgid位。我尝试在我编写的程序中使用gdb,但我无法单步完成代码。我只是在使用gdb加载的.so文件启动程序时,出现了一个分段错误。如何解决此问题?

我有一个创建日志文件的进程,文件权限为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);
} 
#包括
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个。你是对的,我以前没有编写过插入器,但我找到了解决方案,我所需要的只是在处理程序的定义中为权限添加一个附加参数。