gpt4 book ai didi

windows - 在运行时重新编译可执行文件是否安全?

转载 作者:IT王子 更新时间:2023-10-29 00:13:37 25 4
gpt4 key购买 nike

如果我在运行时重新编译可执行文件会怎样?操作系统是否在开始运行时将可执行文件的所有内容读入内存,因此它永远不会读取新的可执行文件?或者它会读取新的可执行文件的部分,认为它没有改变,导致可能出现未定义的行为?

如果我运行的脚本在循环中重复调用可执行文件,并且我在脚本运行时重新编译可执行文件怎么办?是否保证循环的 future 迭代将调用新的可执行文件,并且只有进行切换时正在进行的调用的结果可能被破坏?

我的操作系统是 Linux,但我也很好奇在 Windows 上会发生什么。

最佳答案

由于这是一个常规的编译器,它会写出一个可执行文件,所以让我们在 Linux 中遵循它。

首先要知道的是,Linux 文件名并不直接引用文件,而是引用独立于文件名的目录条目。文件实际上不需要有文件名,但如果没有,将很难引用它。

如果一个进程正在使用一个文件,而您替换或删除它,该进程将通过其目录条目继续使用该文件。任何使用该文件或查找该文件的新进程都将获得新版本(如果您替换了它)或无法找到它(如果您删除了它)。一旦所有进程都完成了旧文件,它将从文件系统中删除。

因此,如果您重新编译并创建一个新的同名可执行文件,您不会影响正在运行的进程。它将继续使用旧的可执行文件。任何尝试打开该文件的新进程都将获得新文件。如果你有 system("foo"); 在一个循环中,每次执行它时它都会看到文件名 foo 的含义。

Windows 以不同方式处理文件。一般情况下,如果有进程使用某个文件,则该文件会被锁定,无法删除或替换。

关于windows - 在运行时重新编译可执行文件是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3356483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com