我想包括IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
和IMAGE_FILE_NET_RUN_FROM_SWAP
PE标志到我的可执行文件。
这个想法是为了防止从networking运行可执行文件的客户端看到偶尔出现的exception情况,例如当networking卷在睡眠后无法重新连接时。 到目前为止,我们一直build议客户从本地连接的卷上运行可执行文件。
但是,我对虚拟内存,加载器等知之甚less,不知道使用这些PE标志有什么风险。
例如,如果我这样做会更多的物理内存被我的可执行文件消耗,特别是如果有多个同时运行的可执行文件的实例?
对不起,我不能提供更多的潜在风险的例子,但这是我的问题的性质。 我有一种感觉,可能会有这样做的缺点,但根本不知道这些缺点可能是什么。
PE加载程序与虚拟内存管理器一起工作。 简而言之,您的可执行文件并不像需求页面那样加载太多。当然,需求页面已经调出。 由于可执行文件被锁定,不会改变,所以这个效果很好。 不需要交换; RAM只包含MRU部分。
PE标志改变这一点。 如果条件满足,则可执行文件未被锁定,可能会更改/消失。 这意味着即使在启动时,VMM也必须将其所有页面保留在RAM或交换中。 这是很多复制和RAM使用,但结果是网络的损失不再导致页面错误。 而当内存不足时,页面不能被丢弃,而必须保存为交换。
特别是, 当且仅当条件满足时,这些标志才起作用。 IMAGE_FILE_NET_RUN_FROM_SWAP
不会影响本地运行的应用程序。 所以支付内存/交换价格的唯一客户是那些选择的客户。