覆盖库文件会导致分段错误

时间:2010-10-04 12:01:06

标签: linux shared-libraries

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

2 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:2)

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

相反,将新文件作为临时文件写入同一目录,然后使用rename()以原子方式重命名。这就是安装人员通常所做的事情。