Epätodellinen tila

Unreal-tila (joskus myös Big Real Mode, 32-bit Real Mode, Flat Real Mode ) on menetelmä, joka mahdollistaa jopa 4 gigatavun muistin käsittelemisen Intel 80386 -prosessorin tai sitä uudemman reaalitilasta 1 megatavun sijasta. todellisessa tilassa . Toisin kuin nimi, tämä menetelmä ei ole prosessoritila .

Sitä käytettiin aktiivisesti joissakin MS-DOS- sovelluksissa 1990-luvun alussa, mukaan lukien joissakin peleissä (esimerkiksi Ultima VII [1] ). Käytetään myös suoritettaessa SMM- koodia [2] .

Moden suosion vuoksi Intelin oli tuettava sitä myöhemmissä prosessoreissa, vaikka se jäikin dokumentoimatta [3] .

Kuvaus

MS-DOS- ydin toimii 16-bittisessä prosessoritilassa , real tai V86.

1 MiB:n osoitetilan rajoituksen poistamiseksi (joka määrää 16-bittisen prosessorin reaalitilan osoitus) tarvitaan suojattu tila (kun 16 MiB RAM-muistia tulee saataville, jotta saadaan suurempi määrä - jopa 4 GiB, 32-bittinen suojattu tila tarvitaan, joka ilmestyi 80386-prosessoreissa).

Siten paljon muistia vaativien DOS-ohjelmien kehittämiseksi piti joko ohjelmoida suojatussa tilassa ja käyttää DOS- ja DPMI-laajenninta (kuten Doom on kirjoitettu, esim. ), tai käyttää dokumentoimatonta prosessoriominaisuutta. Suojatun tilan kehittäminen vaati koko työkalupakin ja tätä varten suunnitellun debuggerin käyttöä, joka yleensä liitettiin tiettyyn DOS-laajentimeen. Nämä paketit olivat kalliita, eivät yhtä suosittuja kuin tavalliset DOS-kehitysympäristöt, ja siksi ne usein hylättiin. Dokumentoimaton ominaisuus salli kaiken muistin käytön sovelluksesta, joka on kehitetty normaalissa DOS-kehitysympäristössä, kuten Borland C++ .

Tämä ominaisuus koostuu siitä, että voit siirtyä hetkeksi 32-bittiseen suojattuun tilaan, ladata sinne segmenttien kuvauksia, joiden rajat ylittävät 64K, ja palata sitten takaisin 16-bittiseen reaalitilaan. Poistuessa tallennetaan yli 64K ylittävän rajan arvo, rajaa ei nollata poistuttaessa itsestään. Sen jälkeen käyttämällä 32-bittisiä ohjeita , jotka on eksplisiittisesti kirjoitettu assemblerissä , pääset suoraan käsiksi koneen koko muistiin suhteessa segmenttiin, jossa on "väärä" raja.

Mahdollisuus tällaiseen osoitteeseen seuraa suoraan teknisistä tiedoista 80386 , joissa tähän on esitetty kaksi mahdollisuutta. Ensimmäinen on dokumentoitu siirtyminen suojatusta tilasta reaalitilaan tyhjentämällä PE-lippu CR0-rekisteristä (sen edeltäjä 80286 jätti huomiotta yritykset poistaa tämä lippu CR0:n 16-bittisessä versiossaan, nimeltään MSW). Toinen on kyky asettaa segmentin koko yhtä suureksi kuin koko käytettävissä olevan fyysisen osoiteavaruuden koko (johtuen siitä, että rekisterien bittileveys on yhtä suuri kuin osoiteväylän bittileveys).

"Varjorekisterien " olemassaolo segmenttirekistereihin liittyvien segmenttien ominaisuuksien välimuistiin tallentamiseksi ja suojatussa tilassa asetetun segmenttirekisterin tilan "muistamiseksi" jopa todelliseen vaihtamisen jälkeen dokumentoitiin 80286, jossa niitä voidaan käyttää myös (tällä kertaa todella dokumentoimattomalla tavalla) kaikkeen fyysiseen muistiin pääsemiseen reaalitilassa, ei kuitenkaan lineaarisen osoituksen muodossa, kuten 80386:ssa, vaan 64 KB:n "ikkunoiden" segmenttien kautta.

Rajoitukset

Tätä menetelmää ei voi käyttää koodin tai pinon osoitteisiin [4] , DOS-pohjaisissa moniajoympäristöissä ja Windows -käyttöjärjestelmän "Virtual 8086" -ikkunassa , mukaan lukien NTVDM . Lisäksi Unreal-tila ei ole yhteensopiva EMM386 :n kanssa  - jälkimmäinen toimii luomalla yhden V86 - tilan virtuaalikoneen ja sijoittamalla siihen kaikki DOS:t. Täydelliset virtuaalikoneet, kuten Virtual PC ja VMware Workstation , toimivat yleensä ilman ongelmia.

Muistiinpanot

  1. Riiser, Haakon HIMEM.SYS ja unreal/flat real mode, EMM386 ja UMB . comp.os.msdos.programmer . Haettu 14. lokakuuta 2017. Arkistoitu alkuperäisestä 7. joulukuuta 2019.
  2. https://www.blackhat.com/docs/us-15/materials/us-15-Domas-The-Memory-Sinkhole-Unleashing-An-x86-Design-Flaw-Allowing-Universal-Privilege-Escalation.pdf Arkistoitu 5. tammikuuta 2017 Wayback Machinessa "Prosessori lataa arkkitehtonisesti määritellyn järjestelmätilan "Unreal"-tilassa"
  3. Gutmann, Cryptographic Security Architecture: Design and Verification , 2004, ISBN 9780387953878 , sivu 58 "Unreal-tilasta tuli niin laajalti käytössä… että Itnelin oli pakko tukea sitä kaikissa myöhemmissä prosessoreissa, vaikka sen läsnäoloa ei koskaan dokumentoitu"
  4. Unabridged Pentium 4 IA32 -suorittimen genealogia, Addison Wesley ISBN 0-321-24656-X . Suuri todellinen tila

Linkit

Kirjallisuus