小编Ste*_*mit的帖子

覆盖正在运行的可执行文件或 .so

我有一个关于覆盖正在运行的可执行文件或覆盖一个或多个正在运行的程序正在使用的共享库 (.so) 文件的问题。

过去,出于显而易见的原因,覆盖正在运行的可执行文件是行不通的。甚至还有一个特定的 errno 值 ETXTBSY,它涵盖了这种情况。

但现在相当长一段时间,我注意到,当我不小心尝试覆盖正在运行的可执行文件(例如,通过发射了一个构建,其最后一步是cc -o exefile对的exefile,恰好运行),它的工作原理!

所以我的问题是,这是如何工作的,是否在任何地方都有记录,依赖它是否安全?

看起来有人可能已经调整ld以取消链接其输出文件并创建一个新文件,只是为了消除这种情况下的错误。我不太清楚它是一直在这样做,还是仅在需要时才这样做(也就是说,可能是在它尝试覆盖现有文件并遇到 ETXTBSY 之后)。而且我在ld的手册页上没有看到任何提及。(我想知道为什么人们不抱怨ld现在可能会破坏他们的硬链接,或者改变文件所有权,等等。)


附录:这个问题并不是专门关于cc/ ld(尽管这最终成为答案的重要部分);问题真的只是“为什么我再也看不到 ETXTBSY?它仍然是一个错误吗?” 答案是,是的,它仍然是一个错误,只是在实践中很少见。(另请参阅我刚刚发布到我自己的问题的澄清答案。)

executable write ld

7
推荐指数
1
解决办法
2978
查看次数

标签 统计

executable ×1

ld ×1

write ×1