There's no need. Put code in code pages, data in data pages. Intel processors have had the ability to manage virtual memory mapping for code vs. data since the 286. The 386 made it easier by using demand paged virtual memory instead of the 286's silly segmented menory. Make the code pages readonly and mapped separately and it is impossible for buffer overflows to overwrite code.
Microsoft has never understood the difference between code and data. All their documents have to have the ability to execute arbitrary code so that you can get the stupid dancing bunnies and those lovely email worms.