当修改常量区的数据,会查询页表属性,发现pte属性是只读的会触发一个异常,然后异常处理程序给你返回一个c05错误。VirtualProtect函数并不会修改pte的读写属性,当调用这个函数时,会将pte的某个空闲位置1,作为写时拷贝标记。当你向这个地址写入数据时,会触发异常,异常处理程序会判断写时拷贝标记是否为1,如果为1就将当前物理页重新拷贝一份,然后修改线性地址的pte,让它指向拷贝的物理页,到这里线性地址所指向的物理页已经变更了。也就是说用这个函数并不能修改常量区的数据,你所修改的只是常量区的副本而已。