【问题标题】:Overwriting library file causes segmentation fault覆盖库文件导致分段错误
【发布时间】:2010-10-04 12:01:06
【问题描述】:

运行可执行文件后,我用新版本覆盖其 .so 库文件,这会导致可执行文件因分段错误而死。我认为只有在加载 ELF 文件时才访问库文件。我错了吗?

【问题讨论】:

    标签: linux shared-libraries


    【解决方案1】:

    库文件在加载时被映射到内存中(通常是在加载可执行文件时 - 但库也可以稍后使用dlopen() 加载)。然后根据需要按需加载文件的实际页面。

    覆盖文件将导致映射MAP_SHARED 的文件中的页面(大部分)使用新内容进行更新。这就是导致分段错误的原因。不要那样做 - 而是删除现有的 .so 文件,然后在其位置写入新文件。

    【讨论】:

      【解决方案2】:

      就像 caf 所说,在运行时覆盖可执行文件并不是一个好主意。

      相反,将新文件作为临时文件写入同一目录中,然后使用 rename() 自动重命名。这是安装人员通常会做的事情。

      【讨论】:

        猜你喜欢
        • 2020-09-26
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多