PAGE_EXECUTE 和 PAGE_EXECUTE_READ 有什么区别?

Era*_*man 5 windows winapi virtual-memory

Windows 提供了 2 个不同的内存保护常量(例如VirtualProtect的第三个参数),它们的行为似乎相似:PAGE_EXECUTEPAGE_EXECUTE_READ

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

那么.. 为什么有两个不同的常量,它们之间有什么区别?为什么我应该更喜欢一个?