是否存在与IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP或IMAGE_FILE_NET_RUN_FROM_SWAP相关的风险?

Dav*_*nan 20 windows winapi

我想包括的IMAGE_FILE_REMOVABLE_RUN_FROM_SWAPIMAGE_FILE_NET_RUN_FROM_SWAPPE标志,以我的可执行文件.

这个想法是为了防止从网络运行可执行文件的客户端看到的偶然异常,例如网络卷在睡眠后无法重新连接.到目前为止,我们始终建议客户端从本地连接的卷运行可执行文件.

但是,我对虚拟内存,加载程序等知之甚少,以了解与使用这些PE标志相关的风险(如果有的话).

例如,如果我这样做,我的可执行文件将消耗更多的物理内存,特别是如果有多个可执行实例同时运行?

对不起,我不能提供更多潜在风险的例子,但这就是我的问题的本质.我有一种感觉,这样做可能有缺点,但根本不知道这些缺点是什么.

MSa*_*ers 15

PE加载程序与虚拟内存管理器一起工作.简而言之,您的可执行文件并不像需求页面那样加载.当然,还需要分页.由于可执行文件已被锁定且不会更改,因此可以正常工作.不需要交换; RAM只包含MRU部件.

PE标志改变了这一点.如果条件满足,则可执行文件未锁定,可能会更改/消失.这意味着即使在启动时,VMM也必须将其所有页面保留在RAM或交换中.这是很多复制和RAM使用,但结果是网络丢失不再导致页面内置错误.当RAM很低时,页面不能被丢弃,但必须保存为交换.

特别是,当且仅当条件满足时,这些标志才起作用.IMAGE_FILE_NET_RUN_FROM_SWAP不会影响本地运行的应用程序.因此,唯一支付RAM/swap价格的客户就是那些选择的客户.

  • @DavidHeffernan想象一下,这个标志是`RUN_FROM_TEMP`,它的意思是"当运行这个文件时,首先将它复制到TEMP目录,然后运行该副本而不是原始文件." 这就是发生的事情.除了使用交换文件而不是TEMP目录. (11认同)
  • @DavidHeffernan图像被复制到加载时交换,而不是在页面输出时.(毕竟,这就是标志的重点.)它们在页面输出时被简单地丢弃,因为在交换中已经存在安全副本. (3认同)