egn*_*-ms 8 linux image process
如果进程B(在通常的write()系统调用时)将一些数据写入进程A的映像(而后者正在执行),该怎么办?它不会导致进程A正在执行的腐败吗?
我是Linux的新手.据我所知,Unix历史上并没有强制执行强制文件锁(就像Windows一样).所以写作很有可能.
我在网上搜索没有结果.当我向Linux经验丰富的同事提出这个问题时,他们都回答过程A的图像完全在内存中.
然而,根据我的阅读,内核可以轻松地将一些页面从内存交换回图像文件,例如,当内存条件很低时.因此,在磁盘上,某些页面可能会被另一个编写器进程损坏; 之后,它们可以交换回RAM并执行.
您是否正在考虑一个进程写入/proc/1234/mem另一个进程的某些内容pid_t1234 ?
或者您是否正在考虑将一个进程写入另一个进程的 ELF 可执行文件?
这两种情况都非常罕见,并且是 Linux 特有的(其他 Posix 没有这些),所以我不知道在这种情况下会发生什么。但至少许可机制应该保护一些。
另请参阅ETXTBSY错误。
在实践中(如图所示strace -f /usr/bin/gcc hello.c -o hello),编译器和链接器会在open编写可执行文件之前删除可执行文件,因此大多数编译不会写入旧的可执行文件:
870 stat("hello", {st_mode=S_IFREG|0755, st_size=6096, ...}) = 0
870 unlink("hello") = 0
870 open("hello", O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0777) = 17
870 fstat(17, {st_mode=S_IFREG|0755, st_size=0, ...}) = 0
Run Code Online (Sandbox Code Playgroud)
所以要写入可执行文件,你必须努力尝试。当然,当你这样做时,可能会发生顽皮的崩溃。
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |