Ale to je přece nesmysl, NX bit samomodifikujícímu kódu samozřejmě nebrání, jenom je třeba to dělat správně a před provedením toho kódu dané stránce přidat přístup PAGE_EXECUTE.
Jasne, ze je to na cely segment, ale nikdo nikoho nenuti mit flat model, ze (hovorime o 32b x86 platforme). Problemem je, ze programatori jsou take jen lide (a docela lini lide :-), a dale dany typ OS je hodne rozsireny. Zajimave by bylo, jak by to dopadlo, kdyby se nekdo pustil do "predelani" kernelu, pokud by Windows byly open source.
Aplikace s NX flagem - sorry, ale jak jsem cetl, tak tento flag je implementovan az v poslednich CPU, takze starsi CPU je mit nebudou. Od Pentia2 jsem prestal podrobne sledovat tuto procesorovou radu ;-)...
IMHO je myslenka samomodifikujiciho se kodu super, ale ne v tomto prostredi!(?) To uz by se mi vice zamlouvaly programy specielne psane pro dany typ CPU...
Ved to ze len segment :) to je ten problem. Segmenty sa skoro nepouzivaju. Kazdy proces ich dostane zopar (lebo ich musi mat) a aj tie su roztiahnute na celu pamat (4GiB) tzv. flat model.
AMD dalo tento flag aj na stranku (4KiB, 4MiB). Intel to mal vymyslene dobre, ale spatna kompatibilita a lenivost znemoznili pouzivat nonexec flag na segnemtoch.
Vela aplikacii nefunguje s NX flagom, lebo si v datovom segmente skladaju kod ktory potom spustaju. Niektore kodeky si poskladaju dekoder s mmx, sse alebo 3dnow podla procesoru. Oracle pre procedury(?), ...
Jo jo, pekne, dalsi bezpecnostni dira :-). Ale ta zaplata, zapomnel jste dodat, podle clanku v soucasne dobe funguje jen pro nejnovejsi CPU ("Although the support for this feature is currently limited to 64-bit processors, Microsoft expects future 32-bit and 64-bit processors to provide execution protection.").
BTW. uz si nevzpominam presne (a hledat v RTFM neni cas), ale uz drivejsi deskriptory procesoru INtel & comp. nabizely, zda dany segment je executable, nebo ne.
S tim Windows open source me napada, zda by Linux ustal ten napor. No flame pls.