现象1:有的可执行文件运行时,可以手动删除/重命名,但是无法覆盖该可执行文件。例如vc向导生成的MFC对话框程序;
现象2:有的可执行文件运行时,不可以手动删除/重命名/覆盖该可执行文件,会提示文件正在被使用。例如微软的msnmsgr.exe;按道理可执行文件运行时,该文件的部分被映射到内存么,那么该文件应该还被OS占用。现象2才合理,可是怎么解释现象1呢??
现象2:有的可执行文件运行时,不可以手动删除/重命名/覆盖该可执行文件,会提示文件正在被使用。例如微软的msnmsgr.exe;按道理可执行文件运行时,该文件的部分被映射到内存么,那么该文件应该还被OS占用。现象2才合理,可是怎么解释现象1呢??
可执行文件也差不多.有些可能没有被加载.
这个文本可以理解啊,Notepad.exe读完就不锁定TXT。可是我想问的是可执行文件自己。对于现象1来说,难道os一次把它映射完了就不锁定了? 如果不锁定了,那怎么不能用同名的文件覆盖呢?
除非程序中HOOK删除动作,然后程序自杀(退出时自己删除自己)
Notepad.exe读入文件 和 OS的PELoader加载PE的机制不一样
Notepad.exe是一次性将文件读入内存的,
PE加载是通过内存映射
的确不能删除,能剪贴到其它目录。我还以为也可以删除呢。。晕。 更正现象1如下。现象1:有的可执行文件运行时,可以手动移动/重命名,但是无法覆盖该可执行文件。例如vc向导生成的MFC对话框程序;
此标记在VS2005/2008的link选项里面,仔细找"swap from net"这个选项。