Windows 什么';页面执行和页面读取之间的区别是什么?

Windows 什么';页面执行和页面读取之间的区别是什么?,windows,winapi,virtual-memory,Windows,Winapi,Virtual Memory,Windows提供了两个不同的参数(例如for的第三个参数),它们的行为似乎相似:PAGE\u EXECUTE和PAGE\u EXECUTE\u READ 似乎PAGE\u EXECUTE应该是仅执行权限(不带读取)。但是,没有读取的执行权限没有多大意义,因为CPU需要先从内存中读取指令,然后才能解码和执行它们。此外,我还了解到,确实PAGE\u EXECUTE内存也允许从中读取 所以。。为什么有两个不同的常数,它们之间有什么区别?为什么我应该选择一个而不是另一个?我怀疑完整性/对称性,有点像C

Windows提供了两个不同的参数(例如for的第三个参数),它们的行为似乎相似:
PAGE\u EXECUTE
PAGE\u EXECUTE\u READ

似乎
PAGE\u EXECUTE
应该是仅执行权限(不带读取)。但是,没有读取的执行权限没有多大意义,因为CPU需要先从内存中读取指令,然后才能解码和执行它们。此外,我还了解到,确实
PAGE\u EXECUTE
内存也允许从中读取


所以。。为什么有两个不同的常数,它们之间有什么区别?为什么我应该选择一个而不是另一个?

我怀疑完整性/对称性,有点像C中有一个一元+运算符,它不做任何特别的事情。你看不到只写或不写执行(不读)选项,所以对此不确定。。但是一个好主意:)页面保护选项对于运行Windows的任何实际处理器都是过度指定的。它被设计成与体系结构无关的,也支持哈佛体系结构,具有用于数据和代码的独立内存总线。英特尔和AMD处理器过去在页面描述符中只有一个写启用位。后来添加了no execute位。没有禁用读取的选项。所以在实践中,区别并不重要,只要选择一个描述你将要做什么的。