写入Linux上执行进程的映像

写入Linux上执行进程的映像,第1张

概述如果进程B(在通常的write()系统调用时)将一些数据写入进程A的映像(而后者正在执行),该怎么办?它不会导致进程A正在执行的腐败吗? 我是Linux的新手.据我所知,Unix历史上并没有强加强制文件锁(就像Windows一样).所以写作很有可能. 我在网上搜索没有结果.当我向Linux经验丰富的同事提出这个问题时,他们都回答过程A的图像完全在内存中. 然而,根据我的阅读,内核可以轻松地将一些页 如果进程B(在通常的write()系统调用时)将一些数据写入进程A的映像(而后者正在执行),该怎么办?它不会导致进程A正在执行的腐败吗?

我是Linux的新手.据我所知,Unix历史上并没有强加强制文件锁(就像windows一样).所以写作很有可能.

我在网上搜索没有结果.当我向linux经验丰富的同事提出这个问题时,他们都回答过程A的图像完全在内存中.

然而,根据我的阅读,内核可以轻松地将一些页面从内存交换回图像文件,例如,当内存条件较低时.因此,在磁盘上,某些页面可能会被另一个编写器进程损坏;之后,它们可以交换回RAM并执行.

解决方法 您是否正在考虑将一个进程写入pID_t 1234的另一个/ proc / 1234 / mem进程?

或者您是否正在考虑将进程写入另一个进程的ELF可执行文件?

scenarii都非常罕见且特定于linux(其他Posix没有这些),所以我不知道在这种情况下会发生什么.但至少许可机制应该保护一些.

另请参见ETXTBSY错误.

在实践中(如strace -f /usr/bin/gcc hello.c -o hello所示)编译器和链接器在打开可执行文件之前删除可执行文件以便编写可执行文件,因此大多数编译都不会写入旧的可执行文件:

870   stat("hello",{st_mode=S_IFREG|0755,st_size=6096,...}) = 0870   unlink("hello")                   = 0870   open("hello",O_RDWR|O_CREAT|O_Trunc|O_CLOEXEC,0777) = 17870   fstat(17,st_size=0,...}) = 0

所以要写入可执行文件,你必须努力.当然,当你这样做时,可能会发生顽皮的崩溃.

总结

以上是内存溢出为你收集整理的写入Linux上执行进程的映像全部内容,希望文章能够帮你解决写入Linux上执行进程的映像所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存