Надо на страницу памяти проставлять разрешение на выполнение...
Винда раньше относилась либерально - если чтение проставлено, то можно и выполнить.

В Линуксе в ядре 2.4 - тоже. А в 2.6 уже требоваться стало. Ввиду этого определённые нюансы в ядре ББ тогда пришлось править.