Windows User Group - Slovak Republic
Windows User Group - Slovak Republic Windows User Group - Slovak Republic
RSS
Windows User Group - Slovak Republic
prihlásenie
meno login
heslo
Automaticky prihlásiť
zabudli ste heslo?
zaregistrujte sa

kalendár podujatí
marec 2024 apríl 2024 máj 2024
po ut st št pi so ne
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
dnes 20.04.2024 dnes 20.04.2024

kto je online?
počet anonymných užívateľov: 22
počet prihlásených užívateľov: 0

Top 10 najčítanejšie
1.Vytvorenie USB boot jed...
2.Oprava MBR sektoru bez ...
3.Windows 7 download
4.HTPC alebo ako si posta...
5.Windows 7 RC v slovenč...
6.Konzole pro zotavení v...
7.Panika menom Conficker
8.Platené vs Zadarmo
9.Inštalujte Windows z U...
10.Windows 7 RC download -...

Windows User Group - Slovak Republic

Software > Ostatní

32-bitové aplikace na platformě x64

Windows User Group - Slovak Republic

64-bitová Windows se snaží 32-bitovým aplikacím vytvořit běhové prostředí, které co nejvěrohodněji kopíruje prostředí opravdového 32-bitového operačního systému. V tomto článku se zaměříme na změny v obsluze volání souborového systému a registru a ukážeme si, že mohou způsobit zajímavé problémy.


64-bitové verze operačních systémů Windows jsou stále populárnější. Krom toho, že lépe využívají možnosti současných procesorů, například v podobě většího počtu větších registrů a možností instrukcí pracujících s 64-bitovými operandy, což se může projevit zrychlením výpočetně náročnějších aplikací, dovolují jednotlivým běžícím procesům využívat větší množství virtuální paměti. Také disponují lepším zabezpečením (vynucení digitálně podepsaných ovladačů, ASLR, Patchguard).

 

Ne všechny programy však lze do podoby nativního 64-bitového kódu převést. Jednak proto, že jejich zdrojové kódy skončily kdesi v propadlišti dějin, druhak z toho důvodu, že programátoři při, když tyto aplikace tvořili, předpokládali platnost invariantů, které na platformě x64 neplatí. Například že velikost adresy je vždy 4 bajty (32 bitů).

 

Protože 32-bitových aplikací je velké množství, 64-bitové verze Windows jejich běh dokáží emulovat. Nejedná se přitom o emulaci na bázi virtuálního stroje – procesory disponují speciálním režimem kompatibility, který dovoluje provádět i 32-bitový kód v 64-bitovém prostředí. Operační systém emuluje pouze systémová volání a několik dalších aspektů života těchto aplikací, ostatní se odehrává přímo na procesoru.

 

64-bitová Windows se snaží 32-bitovým aplikacím vytvořit běhové prostředí, které co nejvěrohodněji kopíruje prostředí opravdového 32-bitového operačního systému. V tomto článku se zaměříme na změny v obsluze volání souborového systému a registru a ukážeme si, že mohou způsobit zajímavé problémy.

 

Souborový systém

 

Adresář %windir%\system32 obsahuje mnoho důležitých systémových knihoven a programů. Na 32-bitových systémech se jedná o 32-bitové binárky, 64-bitová Windows používají 64-bitové.

 

V rámci vytváření iluze prostředí opravdového 32-bitového operačního systému i 64-bitové verze Windows zobrazují 32-bitovým aplikacím ve výše zmíněné složce 32-bitové binární soubory jednotlivých programů a systémových knihoven. Tento trik zajišťuje přesměrování všech operací 32-bitových aplikacínad adresářem %windir%\system32 do složky %windir%\SysWOW64. Přesměrování probíhá pro aplikace zcela transparentně a zajišťuje jej součást systému zvaná File System Redir<>ector.

 

Tímto způsobem vytvářená iluze prostředí 32-bitového operačního systému však nepostačuje ve všech případech. Jako příklad poslouží moje nedávná osobní zkušenost. Nedávno jsem potřeboval zjistit názvy souborů, ve kterých se nachází systémové části stromu registru. Vím, že všechny tyto soubory se nachází v adresáři %windir%\system32\config.

 

Pro zobrazení obsahu příslušné složky jsem se rozhodl použít můj oblíbený správce souborů, Total Commander, jehož spustitelný soubor má 32-bitový formát. Jaké bylo mé překvapení, když se ve složce c:\windows\sytem32\config žádné soubory registru nenacházely! Vysvětlení je jednoduché: komponenta File System Redirector přesměrovala požadavek na zjištění seznamu souborů do složky c:\windows\SysWOW64\config, která sice existuje, ale žádné informace o registru neobsahuje.

 

Z příkladu je patrné, že File System Redirector může neočekávaně zkreslit výsledky vyhledávání. Možností, jak se této nepříjemnosti vyhnout, je několik:

  • Nepoužívat pro účely vyhledávání a prohlížení obsahu adresářů 32-bitové aplikace. Přesměrování se 64-bitových aplikací netýká.

  • Pokud programujeme 32-bitovou aplikaci, u které záleží na tom, aby pracovala bez (ač transparentního) zásahu součásti File System Redirector, může pro povolení a pozdější zákaz přesměrování použít rutiny Wow64EnableWow64FsRedirection a Wow64EnableWow64FsRedirection.

    Jelikož s automatickým přesměrováním počítají některé knihovní funkce, jmenujme například LoadLibrary z knihovny kernel32.dll (kernelbase.dll), nevyplácí se File System Redirector zakazovat ne delší než nezbytnou dobu.

  • Místo system32 použít v zadané cestě slovo sysnative. Jedná se o virtuální adresář viditelný pouze pro 32-bitové aplikace, který systému říká, že program chce přistoupit přímo do složky s 64-bitovými systémovými binárkami.

Pro řešení mého problému se ukázala jako nejvhodnější třetí metoda (Total Commander je 32-bitová aplikace a nemám k dispozici jeho zdrojové kódy). Po zobrazení obsahu složky c:\windows\sysnative\config jsem si mohl přečíst názvy všech souborů registru, které jsem potřeboval.

 

Registr

 

V rámci registru funguje podobný mechanismus jako v souborovém systému. Nazývá se Registry Redirector a zajišťuje transparentní přesměrování operací 32-bitových aplikací nad některými klíči, které většinou pocházejí z podstromu HKLM\SOFTWARE. Cílovým bodem je v případě tohoto klíče podstrom HKLM\SOFTWARE\Wow6432Node.

 

Analogický problém k mé zkušenosti s vyhledáváním souborů vzniká i při operacích nad registrem. Představme si pro ilustraci, že 32-bitová a 64-bitová aplikace se pokusí zjistit seznam podklíčů klíče HKLM\SOFTWARE\X, který patří do objektů, jejichž čtení a modifikace Registry Redirector monitoruje a přesměrovává. 64-bitová aplikace získá všechny podklíče skutečného objektu HKLM\SOFTWARE\X, kdežto 32-bitový program ve skutečnosti obdrží podklíče položky HKLM\SOFTWARE\Wow6432Node\X. Získané výsledky se mohou výrazně lišit, jak prokázala moje další nedávná osobní zkušenost.

 

Aplikace předejte tomuto problému tak, že při získávání přístupu (handle) ke klíči, jehož podklíče chce znát, v parametru rutin RegOpenKeyEx či RegCreateKeyEx sloužícímu k určení požadovaných oprávnění, specifikuje nejvýše jeden z následujících příznaků:

  • KEY_WOW64_32KEY. Všechny operace prováděné nad daným klíčem (a jeho podstromem) budou přesměrovány.

  • KEY_WOW64_64KEY. K žádnému přesměrování docházet nebude.

Program si tak může vybrat, zda ho systém z pohledu operací nad registrem bude vnímat jako 32-bitovou, nebo nativní 64-bitovou aplikaci. Implicitně s ním Registry Redirector zachází podle formátu spustitelného souboru.

 

Stejnou dvojicí příznaků může aplikace ovlivnit chování systému i při mazání klíče. K tomuto účelu slouží rutina RegDeleteKeyEx.

 

Na rozdíl od souborového systému Registry Redirector nevytváří žádný virtuální klíč, který by sloužil jako obdoba složky sysnative. Pravděpodobně z toho důvodu, že oficiální program pro práci s registrem (regedit.exe) se vyskytuje jak v 32-bitové (c:\windows\SysWOW64\regedit.exe), tak i 64-bitové (c:\windows\regedit.exe) podobě.

 

Závěr

 

V tomto článku jste se dozvěděli, že ani vyhledávání či jiné manipulace se soubory nemusí být na 64-bitových verzích Windows tak jednoduché, jak se na první pohled může zdát. Obdobné tvrzení lze vyslovit i o registru; myslím si však, že v rámci souborového systému na tyto zajímavosti člověk, který neustále něco systémového neprogramuje, narazí častěji.

 

Článek si neklade za cíl popsat do nejmenších detailů fungování komponent File System Redirector a Registry Redirector či dalších jevů, se kterými se mohou 32-bitové aplikace na 64-bitovém systému setkat. Snaží se pouze poukázat na fakt, že něco takového existuje a můžete se s tím reálně potkat. Pokud vás ale tyto jevy dále zajímají, prozkoumejte některé z níže uvedených odkazů.

 

Poznámky

 

Zástupný symbol %windir% v tomto článku označuje adresář, kde jsou Windows nainstalována. Obvykle se jedná o c:\windows.

 

Zkratka HKLM v terminologii registru označuje klíč HKEY_LOCAL_MACHINE.

 

File System Redirector přesměrovává krom přístupů do adresáře system32 i operace nad souborem %windir%\regedit.exe na jeho 32-bitovou variantu.

 

Užitečné odkazy a zdroje

 

 

Windows User Group - Slovak RepublicWindows User Group - Slovak Republic Martin Dráb | utorok 16. novembra 2010 17:50 | Prečítané: 12218 x | hodnotenie: 5/5 |
Windows User Group - Slovak Republic
Windows User Group - Slovak Republic
RE: 32-bitové aplikace na platformě x64 reagovať

super clanok, konecne su mi jasnejsie niektore suvislosti medzi 32b a 64b Win. Len ma napadlo otazka ako je to spravou pamate 64bit systemu.

Cisto teoreticky:

-mam na desktope 8GB RAM s Win7 64bit

-mam 32bitovu aplikaciu narocnu na pamat bezne spotrebuje cca 1-2GB

 

ako sa sprava OS ked spustim tuto aplikaciu napr 5-6x. Dalsie instancie tejto 32b aplikacie bezi v "hormych 5-8 GB" pamate? Ako je to adresaciou ved 32bit aplikacia nevie pracovat so 64 bit adresami.

 

dakujem.

 

red.dragon utorok 23. novembra 2010 12:37
RE: 32-bitové aplikace na platformě x64 reagovať

Tady je třeba rozlišovat mezi virtuálním a fyzickým adresovým prostorem. Ve Windows (Linuxu, Mac OS a dalších operačních systémech) aplikace běží ve virtuálním adresovém prostoru. Adresy, na které program přistupuje (nebo ze kterých se vykonává jeho kód), jsou virtuální.

 

V paměti jádra se nachází datová struktura, která udává, na jaké fyzické adresy se mají dané virtuální adresy přeložit. Na procesorech kompatibilních s x86 a x64 se jedná o tzv. stránkovací tabulku. Procesor pomocí této struktury mapuje přístupy na virtuální adresy na příslušné fyzické adresy.

 

To znamená, že aplikace přistupuje na nějakou adresu, ale vůbec neví, kam do fyzické paměti se ve skutečnosti přístup provede (mechanismus je plně transarentní). Přitom velikosti virtuálních adresových prostorů a fyzických adresových prostorů mohou být rozdílné. Například procesory Intel v 32-bitovém režimu s povoleným rozšířením PAE umějí překládat 32-bitové virtuální adresa na 36-bitové fyzické adresy (tedy aplikace může adresovat 4 GB, které se nějakým způsobem mapují do 64 GB fyzického prostoru).

 

Spuštění dvou (či více) 32-bitových, paměťově náročných aplikací neznamená pro systém příliš velký problém. Když taková aplikace požaduje třeba 1 GB paměti, systém jí jej vyhradí a nastaví její stránkovací tabulky tak, aby libovolný přístup na platnou adresu v rámci adresového prostoru aplikace se přeložil na přístup do fyzické paměti, která byla aplikaci vyhrazena.

 

Když je spuštěna další náročná aplikace, systém ji ve fyzické paměti může vyhradit další 1-2 GB. Protože délka virtuální a fyzické adresy je různá a na sobě v podstatě nezávislá, i krátká virtuální adresa (32-bitová) nepředstavuje žádné omezení z pohledu fyzické adresy.

 

Nejsem si úplně jistý, na kolika bitové fyzické adresy je možné překládat 32-bitové virtuální adresy, ale bude to minimálně 36 bitů (64 GB).

 

Doufám, že jsem poskytl alespoň trošku srozumitelnou odpověď.

 

P. S.: Hlavní výhodu 64-bitových aplikací vidím právě v tom, že jejich virtuální adresový prostor je obrovský, tedy mohou v jednom okamžiku pracovat s velkým množstvím paměti (teoreticky i terabajty). 32-bitové aplikace mají virtuální prostor velký pouze 4 GB, což jim ale nebrání běžet na systémech s více než 4 GB RAM. Jenom mohou pracovat najednou max. s těmi čtyřmi gigabajty, protože prostě víc nejsou schopny adresovat.

Martin Dráb streda 24. novembra 2010 14:00
Windows User Group - Slovak Republic

 
Windows User Group - Slovak Republic
vyhľadávanie

partneri

2 % od Vás pre WUG
2 % od Vás pre WUG

sponzori






Windows User Group - Slovak Republic
Windows User Group - Slovak Republic
Windows User Group - Slovak Republic

Copyright © 2008 Windows User Group Slovensko

Windows User Group - Slovak Republic domov Windows User Group - Slovak Republic o nás Windows User Group - Slovak Republic podujatia Windows User Group - Slovak Republic odkazy Windows User Group - Slovak Republic informačné kanály Windows User Group - Slovak Republic
Windows User Group - Slovak Republic