Win11 - Obnovenie nastaveni

Pavel Hudeček edizon na seznam.cz
Pátek Únor 14 16:37:45 CET 2025


No HW pro to zcela striktní rozdělení tam je. Stačí ho jen používat. A 
ano, místo toho se jako "narovnák na vohejbák" používá ochrana na úrovni 
stránek.

Na x86 je to tak, že program je v segmentu indexovaném registrem CS, ten 
musí být typu program a segment typu program má možnosti spouštět 
program a volitelně číst. Pak je zásobník, kam se pšistupuje přes SS, 
tam zas musí bejt jen segment typu stack, v něm nelze spouštět program a 
velikost je limitována sdola, aby mohl růst dolů. Nakonec je klasickej 
segment data, kam lze přistupovat přes DS, ES, ... Nic nebrání tomu mít 
část dat v datech (a třeba i v několika datových segmentech s adresama 
od 0, který ležej v paměti jinde) a část v zásobníku. Pro všechny 
segmenty jsou pak 3 úrovně oprávnění a pravidla co jde a nejde když se liší.

Podobně jsem to viděl třeba na Cortex A8.

Pak jsou ještě speciální segmenty, jako TSS, kde je všechno pro jeden 
proces, včetně masky IO kam může a taky brány volání, aby se dal udělat 
call, kde se offsetová adresa ignoruje, aby se daly volat funkce bez 
možnosti skočit mimo správný vstupní bod. A určitě od Pentia, kdy jsem 
to měl nastudovaný podrobně a psal si vlastní OS v asm, přibylo dost 
dalších vychytávek.

Nejdůležitější je, že segmenty by se neměly překrývat. Jenže místo aby 
se do C dodělala podpora pointerů i se segmentama, Microsoft i Linuxáci 
se na to vy... a segmenty hodili všechny přes sebe, jako to dělaly první 
32b herní enginy v DOSu.

PH

Dne 14.02.2025 v 14:46 Miroslav Mraz napsal(a):
> Jenže rozdělení na program, data a zásobník není zase tak striktní, 
> třeba lokální proměnné mohou být na zásobníku. Prostě to musí být 
> nějak svázáno s překladačem. Nevím jak to mají Windows, ale Linux má 
> program v RX (tedy v podstatě read only) stránce, statická data v RW 
> stránce, kód z ní tedy spouštět nejde, nejde spustit ani z oblasti 
> zásobníku. Jde ale dost jednoduše namapovat stránku s právy RWX, do ní 
> nakopírovat cokoli a to pak spustit.
> Tohle má docela dobře ošetřeno webassembly. Aplikace běží v sandboxu, 
> takže ven, na železo se nedostanete, ale nejde do toho dostat ani 
> nějaký binární blob, který by po spuštění umožnil systémové volání. 
> Sice jde v C-čku pracovat s ukazateli na funkce, nepřímé volání 
> funguje, ale nikdy nedostanete opravdickou adresu funkce. Ta 
> mezivrstva, která se posílá přes web tomu zabrání.
> Vůbec je to složitá problematika, dnešní procesory mají spoustu 
> choulostivých míst z principu a obvykle se najde někdo, kdo si toho 
> všimne a pak už je jen otázka času kdo a kdy to zneužije.
>
> Mtazík
>
>
> On 14. 02. 25 14:09, Pavel Hudeček wrote:
>> No tohle je pro mě nepochopitelný, proč když 386 a dál, větší ARMy a 
>> všechny další CPU u kterých má smysl normální OS, mají HW memory 
>> management s oddělenými adresními prostory programu, dat a zásobníku, 
>> ...
>> Microsoft to snadno moh udělat když dělal Windows NT, ale neudělal.
>> Linux začal na zelený louce a zase nic.
>> Proč?


Další informace o konferenci Hw-list