das ist ein Irrweg. Spätestens mit Einführung des
Executable-Flags werden selbstmodifizierende EXE-Files
scheitern, aus Sicherheitsgründen müssten sie sowieso verboten
sein.
Das hat jetzt alles relativ wenig miteinander zu tun. Das NX-Flag an sich kennzeichnet die Datenbereiche im Adressraum eines Prozesses als „nicht ausführbar“, d.h. ein Sprung aus dem Programm in diese Bereiche führt zu einem Fehler. Nichts abgesehen von zumindest theoretisch schon immer vorhandenen read-only-Flags hindert das Programm daran, irgendwelche Daten zu ändern. Allerdings ist es garnicht so einfach (zumindest unter Windows), schreibend auf eine in Ausführung befindliche Datei zuzugreifen, da diese für Schreibzugriffe gesperrt ist.
Was du wahrscheinlich meinst sind gar witzige Konstruktionen, die Maschinencode auf Stack oder Heap ablegen und dann mittels Funktionspointern oder anderen Mechanismen abrufen, aber das ist nicht das Thema der Anfrage.
Nebenbei bemerkt ist ein selbstmodifizierendes Programm nicht unbedingt gefährlicher als ein „statisches“, nur interessanter und schwieriger zu analysieren. Man kann ganz valide Mittel benutzen, um das NX-Flag oder seine Kollegen zu umgehen, insbesondere dynamische Linker denen man zur Laufzeit Daten aus dem derzeit laufenden Programm verfüttert, die dann in ausführbaren Bereichen des Speichers landen.