Je to už pár rokov čo som sa tým zaoberal, tak mi prosím pripomente, aké privilégiá potrebujem k tomu, aby som si dokázal alokovať premenné v ľubovoľnej časti pamäte na ľubovoľnej adrese?
A v prípade že mám dostatočné práva na alokáciu na n+1 adrese, prečo nie rovno na n-tej (teda tej ktorá ma zaujíma)?
Nevím jaké práva přesně na tohle potřebuješ, ale tohle jde obejít různými způsoby. Třeba alokuješ data po menších blocích a sleduješ ukazatele na kus paměti (tj. pozici v paměti). Tím že postupně zaplňuješ paměť tak ti systém přiděluje postupně další a další bloky volné paměti až ji zaplníš a tvůj program vlastní takřka celou paměť. Pak můžeš ostatní bloky uvolnit a máš kus paměti který jsi chtěl.
"A v prípade že mám dostatočné práva na alokáciu na n+1 adrese, prečo nie rovno na n-tej (teda tej ktorá ma zaujíma)?"
Protože systém ti logicky nepřidělí paměť patřící jinému programu, nebo s jinou úrovní zabezpečení.
Jenom pro zajímavost, některé implementace zneužití rowhammeru využívají zaplnění paměti i pro jiné účely. Třeba tak, že když najdou "slabé" buňky paměti, které mají možnost rowhammerem ovlivnit, tak donutí systém aby do nich načetl citlivá data tak, že právě zbylou paměť předtím zaplní. Systému nezbyde žádná jiná možnost kam je dát, a po tom co je tam načte, tak mu ty data rowhammerem "přebijí".
Možná si to nepamatuji správně. Real mode x86 umožňoval přístup do celé paměti, ale od protected 286 a vyšších snad byla oddělena fyzicka adresace od logické. Procesu je přidělena logická oblast paměti, která je mapována na části fyzické paměti, proces by tak v rámci logické paměti neměl mít přístup(ponětí) o obsahu nepřidělené fyzické paměti.
https://en.wikipedia.org/wiki/Protected_mode#Segment_addressing