OpenBSD 的 W^X 概念是否会阻止自修改代码优化?

Does OpenBSD's concept of W^X prevent self-modifying code optimizations?

我对概念比实际更感兴趣。 Write-xor-execute 似乎意味着代码必须在内存中保持不变,因此不允许进行自我修改。是这样吗?

没有。 W^X 只是由工具链和内核为 运行 普通程序创建的普通映射的策略。这意味着编译器、链接器和内核不会创建同时可执行和可写的映射。

这不是内核强制执行的硬性限制。没有什么可以阻止您创建既可写又可执行的内存映射。即使存在这样的限制,也没有什么能阻止您创建可写的内存映射,写入它然后将保护更改为只读和可执行(这是明智的做法)。