为什么在libachk.so而不是libc.so中调用open()?

时间:2017-03-15 07:25:02

标签: c linux

我有一个非常奇怪的SEGMENT FAULT堆栈如下。

#0  0x00007f3b85fb0f6e in __strstr_sse42 () from /lib64/libc.so.6
#1  0x00007f3b889b5415 in syscheckGetFdPath () from /lib64/libachk.so
#2  0x00007f3b889b4fc7 in acc_achkon_open () from /lib64/libachk.so
#3  0x00007f3b889b46d4 in open () from /lib64/libachk.so
#4  0x0000000000414d44 in nas_log_write_through(buff, size)

nas_log_write_through()的源代码就像这样

void nas_log_write_through(char *buf, int size)
{
    int fd = 0;
    mode_t mod = umask(0);
    fd = open(LOG_PATH, O_RDWR | O_APPEND | O_CREAT, 0777);
    umask(mod);    
    if (-1 == fd)
    {
        return;
    }

    write(fd, buf, size);
    close(fd);
}

在大多数情况下,它运作良好,但它突然很糟糕。像以前的节目一样得到核心转储栈。我想要什么是libachk.so呢?为什么在libachk.so中系统调用open()而不是libc.so?

我在谷歌搜索过,但没有任何用处。欢迎任何建议。 非常感谢。

我的系统是SUSE 11 Linux,spc 1。

0 个答案:

没有答案