DLL peklo

DLL peklo (anglicky DLL hell) je označení pro komplikace, které v operačním systému Microsoft Windows způsobuje používání dynamických knihoven (DLL) – nemožnost spuštění některých programů kvůli chybějícím knihovnám, chybné fungování programů kvůli nekompatibilním verzím knihoven nebo hromadění nevyužívaných knihoven a jejich verzí. Problémy byly závažné zejména u starší 16bitové verze, ve které všechny aplikace používají stejný paměťový prostor. DLL peklo je konkrétní forma obecného problému závislostního pekla (anglicky dependency hell).

Problémy

Používání DLL knihoven přináší kromě výhod (znovupoužitelnost kódu, zmenšení obsazené paměti, standardizace vzhledu a chování aplikací) také problémy, které narůstají s množstvím instalací a odinstalací aplikací. Problémy způsobené nejednoznačnou korespondencí mezi aplikacemi a knihovnami se projevují konflikty mezi knihovnami, shánění knihoven až po spoustu nevyužívaných kopií knihoven. Problém se zvyšuje množstvím aplikací používajících stejné knihovny, jejich nekoordinovaným vývojem, nezralostí knihoven, nedostatkem informací o správných postupech a nevhodným používáním softwarových balíčků.

Nekompatibilní verze

Určitá verze knihovny může být kompatibilní s určitými verzemi softwaru, které ji používají. Bohužel nemusí být kompatibilní s jinými verzemi softwaru. Windows byl zvláště zranitelný, protože kladl velký důraz na dynamické linkovaní C++ knihoven a OLE objektů. C++ třídy obsahovaly velké množství metod a malá změna v jedné z jejich mohla způsobit nekompatibilitu s programy, které ji využívaly. Linkování a propojování objektů má řadu striktních pravidel, aby se právě tomuto zabránilo. Například používání rozhraní, která se nesmí měnit, nebo nepoužívání sdílené paměti. Ani to však není dostatečné, protože fungování uvnitř třídy může být stále změněno. Úprava knihovny může být pro jednu aplikaci opravou chyby, pro jinou odstranění důležité funkčnosti. Systém Windows před verzí Windows 2000 byl v tomto ohledu velmi citlivý, protože COM tabulka tříd byla sdílena všemi uživateli a procesy. V COM objektu bylo pro každou DLL/EXE knihovnu vytvořeno pouze jedno specifické COM ID. Pokud nějaký program potřeboval vytvořit instanci dané třídy nebo knihovny, použila se knihovna z centralizovaného úložiště. Naopak když se nainstaloval nový program, stará verze knihovny byla odstraněna a nainstalovala se verze s novým programem. Důsledkem toho bylo že instalací nového programu přestal fungovat ten starý.

DLL podupávání

Problém DLL podupávání (anglicky DLL stomping) nastal, když nový program přehrál jinému programu starou funkční DLL knihovnu novou knihovnou, se kterou starý program nedokázal fungovat. Častým problémem byly knihovny ctl3d.dll a ctl3dv2.dll pro Windows 3.1. Dodavatelé mohli používat ve svých aplikacích Microsoftem vytvořené knihovny, ale raději ke svým programům přidávali knihovny vlastní. Dupání DLL se objevilo z důvodů:

  • Microsoft distribuoval runtime DLL knihovny jako systémové komponenty (původně v C:\WINDOWS a C:\WINDOWS\SYSTEM). Tím ušetřil místo v paměti, proto knihovny byly sdílené. To mělo smysl u strojů, které měly malou paměť.
  • Instalátory aplikaci jsou typicky spuštěny v privilegovaném kontextu, který má přístup k instalaci DLL knihoven do systémových adresářů a má také přístup do registrů, kde může nové DLL knihovny registrovat jako COM objekty. Špatně napsaný instalátor může nainstalovat starší verzi systémové DLL knihovny a nic ho v tom nezastaví. Ve Windows Vista a vyšších to může provést pouze instalátor, který je označen jako důvěryhodný nebo si vyžádá administrátorské heslo.
  • Aplikacím ve Windows bylo povoleno, aby v rámci svých instalací stahovaly aktualizace operačního systému. Pokud tedy nějaká aplikace potřebovala knihovnu, začlenila si ji k sobě už při instalaci.
  • Před vydáním Windows Installeru existovaly pouze komerční programy, které instalátor zastupovaly a spousta lidí si začala psát vlastní instalátory. Bohužel ne všichni znali pravidla, jakými by se instalátory měly řídit. Tím se do operačního systému dostávaly různé verze DLL knihoven.
  • Některá vývojová prostředí automaticky nepřidávala verzi knihovny ke svým kompilovaným knihovnám a spousta vývojářů na to taky zapomínala. Tím se opět dostaly do systému knihovny, které neodpovídaly ve verzi, které softwary potřebovaly.
  • Občas operační systém DLL knihovnu odstranil nebo nahradil starší nebo zastaralou verzí. Například systém Windows 2000 nahradil ovladač barevné tiskárny ovladačem černobílé tiskárny, pokud byla barevná tiskárna nainstalována první.

Nesprávná COM registrace

V COM objektech a další částech Microsoft Windows je důležité, aby si všechny aplikace mohly registrovat svoje komponenty. Registry byly určeny pro to, aby řekly, která DLL se má ve výsledku použít. Pokud ovšem byla v registrech zapsána jiná DLL (jiná verze), tak program dostal knihovnu, která pro něj byla nefunkční. Toto se stalo, pokud jedna aplikace při instalaci přepsala jinému programu verzi knihovny, která měla sice stejné jméno, ale jinou verzi.

Sdílené paměťové moduly

Všechny 16bitové verze Windows pro DOS načítají jen jednu instanci každé DLL knihovny. Všechny aplikace odkazují na jednu kopii v operační paměti, a teprve když ji žádná aplikace nepoužívá, je DLL z paměti uvolněna. V řadě Windows NT (32bitové i 64bitové) dochází ke sdílení knihoven mezi procesy pouze v případě, že různé spustitelné soubory načítají DLL modul ze stejného adresáře a souboru. Sdílí se pouze výkonný kód, nikoliv však zásobník. Sdílení kódu mezi procesy je zajištěno mechanismem mapováním paměti (anglicky memory mapping), takže i když je požadovaná DLL knihovna umístěná v adresáři, kde je očekáváno její umístění, jako například v systémovém adresáři nebo v adresáři aplikace, sdílení se nepoužije, když jiná aplikace začala používat nekompatibilní verzi z jiného adresáře. Tento problém se může projevovat jako chyba 16bitové aplikace, ke které dochází pouze tehdy, když se aplikace spustily ve určitém pořadí.

Nedostatek provozuschopnosti

V přímém rozporu s problémem DLL podupávání: Pokud aktualizace DLL nemá vliv na všechny aplikace, které ji používají, tak se DLL knihovny stávají těžší na správu, což znamená k odstranění problémů, které se vyskytují v současných verzích DLL (bezpečnostní opravy jsou zvláště přesvědčivý a bolestivý případ). Místo použití pouze nejnovější verze DLL, musí implementace v ideálním případě opravit problémy a otestovat jejich kompatibilitu na každé vydané verzi DLL.

Příčiny

Nekompatibilitu DLL způsobuje:

  • Nedostatek operační paměti v kombinaci s neoddělením paměti procesů v 16bitových verzích Windows.
  • Nepřítomnost vynuceného standardního verzování, tj. pojmenování a systémových umístění schémat pro DLL.
  • Není vyžadována jednotná metoda pro instalaci a odstraňování softwaru (správce balíčků).
  • Centralizovaná autoritativní podpora pro binární rozhraní řízení a záruk DLL aplikace, dovolující vydání nekompatibilním DLL knihovnám se stejným názvem souboru a interním číslem verze.
  • Příliš zjednodušené nástroje pro správu, které brání identifikaci změněných problematických DLL uživateli a administrátory.
  • Vývojářské obcházení zpětné kompatibility funkcí ve sdílených modulech.
  • Microsoft vydává aktualizace běhového prostředí operačního systému mimo standardní aktualizace.
  • Neschopnost dřívějších verzí systému Windows spustit vedle sebe různé verze téže knihovny.
  • Spolehnutí se na aktuální adresář nebo proměnnou prostředí %PATH%, kde oba parametry se mění v čase a systém od systému, k najití závislé DLL knihovny (namísto jejich načtení z explicitně nakonfigurovaného adresáře).
  • Developeři znovu používají ClassID z ukázkové aplikace pro COM rozhraní svých aplikací místo toho, aby vytvořili svoje vlastní nové GUID.

DLL peklo byl velmi častý jev na systémech před vydáním Windows NT. Hlavní příčinou je, že 16bitové operační systémy neuměly omezovat procesy k jejich vlastnímu paměťovému prostoru, a tím jim nedovolit nahrání vlastní verze sdílených modulů, které jsou s ním kompatibilní. U aplikačního instalátoru se očekává, že bude kvalitní a bude ověřovat informace o verzi DLL knihovny před přepsáním existující systémové DLL knihovny. Standardní nástroje ke zjednodušení nasazení aplikací (které vždy zahrnují dodání vlastní potřebné DLL knihovny na operačním systému) byly poskytnuty společností Microsoft a dalšími dodavateli softwaru. Microsoft dokonce vyžaduje po dodavatelích aplikace použití standardního instalátoru a verifikaci jejich programu, aby správně fungoval, než mu bude povoleno použití loga Microsoftu.

Použití malwarem

Nejednoznačnost, s níž knihovny, které nejsou plně kvalifikované, mohou být vloženy do operačního systému Windows je v posledních letech zneužívána malwarem k otevření nových cest zranitelnosti, které ovlivňují aplikace od mnoha různých dodavatelů software, stejně jako systém Windows.

Řešení

Různé druhy DLL pekla byly v průběhu let vyřešeny nebo zmírněny.

Statické linkování

Jedním z nejjednodušších řešení DLL pekla v aplikaci je k ní připojit všechny statické knihovny. Toto je běžné v Microsoft C/C++ aplikacích, kde místo toho, abychom se museli starat o to, které verze MFC42.DLL jsou nainstalovány, aplikace je sestavena tak, aby se propojila se statickými knihovnami. To eliminuje DLL úplně, a je přijatelné pro samostatné aplikace, které používají pouze knihovny, které nabízejí statické možnosti, jako je například Microsoft Foundation Class Library. Tím mizí hlavní výhoda DLL (sdílení knihoven v paměti mezi za účelem snížení zatížení paměti), ale zjednodušuje se další vývoj softwaru a komplikované nasazení bezpečnostních oprav nebo novějších verzí softwaru.

Ochrana souborů systému Windows

Problém přepsání DLL byl poněkud snížen s příchodem Ochrany souborů systému Windows (Windows File Protection, WFP), která byla zavedena v systému Windows 2000. WFP zabrání neautorizovaným aplikacím přepsání systémové knihovny DLL, pokud nepoužívají specifické rozhraní Windows API, které toto umožňují. Stále ale existuje riziko, že aktualizace od společnosti Microsoft budou neslučitelné s existujícími aplikacemi, ale toto riziko je obvykle sníženo v současných verzích systému Windows pomocí Side-by-side assembly (SFC).

Aplikace třetích stran nemohou měnit soubory OS, pokud neobsahují balík legitimních aktualizací systému Windows přímo v jejich instalaci, nebo v případě, že tuto službu zakázala ochrana souborů systému Windows během instalace. Od Windows Vista aplikace třetích stran nemohou převzít vlastnictví systémových souborů a udělit si k nim přístup. Nástroj SFC může kdykoliv tyto změny vrátit.

Spuštění konfliktních knihoven DLL

Řešení spočívá v tom, mít obě odlišné kopie stejné DLL knihovny pro každou aplikaci, obě na disku i v paměti.

Snadné manuální řešení konfliktů bylo umístění různých verzí problémových DLL knihoven do složek aplikací, než do společné složky celého systému. Toto funguje obecně tak dlouho, dokud aplikace je 32bitová nebo 64bitová a pokud DLL nepoužívá sdílenou paměť. V případě 16bitových aplikací nelze spustit na 16bitové platformě dvě aplikace současně nebo na 16bitovém virtuálním stroji pod 32bitovým operačním systémem. Před Windows 98 SE/Windows 2000 tomuto zabraňovalo Object Linking and Embedding (OLE), protože starší verze systému Windows měla jediný registr COM objektů pro všechny aplikace.

Systémy Windows 98 SE/Windows 2000 představily řešení s názvem Side-by-side assembly (SFC), které načte samostatné kopie DLL pro každou aplikaci, která je vyžaduje (a tím umožňuje aplikacím, které vyžadují konfliktní DLL, se spustit současně). Tento přístup eliminuje konflikty tím, že aplikaci umožní načíst požadovanou verzi modulu do svého adresního prostoru, při zachování primárního přínosu sdílení DLL mezi aplikacemi (tj. snížení využití paměti) pomocí metody mapování paměti a sdílení společného kódu mezi různými procesy, které nadále používají stejný modul. Avšak u DLL knihoven využívajících sdílená data mezi více procesy tento přístup nemusí fungovat. Jeden negativní vedlejší efekt jsou osamocené instance DLL knihovny, které nemusí být aktualizovány během automatizovaných aktualizací.

Přenosné aplikace

V závislosti na architektuře aplikace a běhového prostředí může být přenosná aplikace efektivní způsob, jak snížit některé problémy s DLL, protože každý program obsahuje svazky svých vlastních soukromých kopií všech DLL knihoven, které potřebuje.

Virtualizace aplikací může také umožnit běh aplikace v „bublině“, která zabraňuje instalaci DLL knihoven přímo do souborů operačního systému.

Reference

V tomto článku byl použit překlad textu z článku DLL Hell na anglické Wikipedii.

Read other articles:

Minori Hatsune Minori Hatsune (Jepang: 初音みのり; lahir 10 Desember 1987) adalah seorang pemeran film dewasa asal Jepang. Ia debut pada Oktober 2007. Ia sempat menyatakan diri pensiun pada September 2016, namun kemudian kembali pada November 2019.[1] Referensi ^ 復活!3年ぶり!解禁! 人生初 生中出しセックス -SECOND IMPRESSION- 復帰早々マ〇コに真正ザーメン怒涛の9発射!!. ideapocket/アイデアポケット (dalam bahasa Jepang)...

 

Moscow, Park Kultury, Entrance pavilion, by G.T.Krutikov, V.S.Popov, 1935, demolished 1949. Note the slim, square columns without capitals. Postconstructivism was a transitional architectural style that existed in the Soviet Union in the 1930s, typical of early Stalinist architecture before World War II. The term postconstructivism was coined by Selim Khan-Magomedov, a historian of architecture, to describe the product of avant-garde artists' migration to Stalinist neoclassicism.[1]&#...

 

Nama ini menggunakan aturan penamaan Slavia Timur; nama patronimiknya adalah Vladimirovna dan nama keluarganya adalah Poklonskaya. Natalia PoklonskayaDeputi Duma Negara RusiaPetahanaMulai menjabat 5 Oktober 2016Jaksa Agung Republik KrimeaMasa jabatan2014 – 4 Oktober 2016PresidenVladimir PutinPerdana MenteriSergey AksyonovPendahuluBaru terbentukPenggantiOleg Kamshylov Informasi pribadiLahir18 Maret 1980 (umur 43)ProfesiPengacara, Jaksa AgungSunting kotak info • L...

Japanese condiment made from sesame and salt This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help to improve this article by introducing more precise citations. (July 2019) (Learn how and when to remove this template message) GomashioTypeCondimentPlace of originJapanMain ingredientsSesame seeds, salt Gomashio (hiragana: ごま塩; also spelled gomasio) is a dry condiment, similar to furika...

 

Johanna Bonger (Porträt von Johan Cohen Gosschalk, 1905) Johanna Gezina van Gogh-Bonger (* 4. Oktober 1862 in Amsterdam; † 2. September 1925 in Laren (Noord-Holland)) war eine niederländische Kunstsammlerin und Schwägerin von Vincent van Gogh. Als Ehefrau von Theo van Gogh erbte sie 1891 den Nachlass von Theo und Vincent van Gogh. Indem sie Ausstellungen organisierte und den Briefwechsel der Brüder van Gogh herausgab, machte sie das Werk Vincent van Goghs international bekannt. Inhaltsv...

 

Honeywell Specialty Chemicals Seelze GmbH Rechtsform GmbH Gründung 1814 Sitz Seelze, Deutschland Mitarbeiterzahl 572 Umsatz 204 Mio. EUR[1] Branche Chemieunternehmen Website www.honeywell-seelze.de Stand: 2019 Das Werksgelände 2016, (rechts in der Bildmitte) Honeywell Seelze (2005) Erhaltenes Firmengebäude aus der Gründerzeit Die Honeywell Specialty Chemicals Seelze GmbH ist ein in Seelze ansässiges Chemieunternehmen. Das bis 1999 unter Riedel-de Haën AG firmierende Unternehmen ...

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (فبراير 2018) تعفن الاباما أو اعتلال الأوعية الدموية الكبيبي الجلدي الكلوي[1] هي حالة في كثير من الأحيان قاتلة في الكلاب. تم تحديده لأول مرة في الولايات المتحدة الأم

 

Moschee in Marawi City, Philippinen Der Islam erreichte die südlichen Inseln der Philippinen erstmals Ende des 14. Jahrhunderts und breitete sich bis zum 16. Jahrhundert auf den ganzen Philippinen aus. Heute ist er hauptsächlich auf Mindanao und dem Sulu-Archipel verbreitet. Etwa 4 Millionen Filipinos sind Muslime. Inhaltsverzeichnis 1 Geschichte 1.1 Islamisierung 1.2 Während der katholischen Missionierung 2 Philippinische Muslime 3 Literatur 4 Einzelnachweise Geschichte Isl...

 

Part of the autonomic nervous system which stimulates fight-or-flight responses Sympathetic nervous systemSchematic illustration showing the sympathetic nervous system with sympathetic cord and target organs.DetailsIdentifiersLatinpars sympathica divisionis autonomici systematis nervosiAcronym(s)SNSMeSHD013564TA98A14.3.01.001TA26601FMA9906Anatomical terminology[edit on Wikidata] The sympathetic nervous system (SNS) is one of the three divisions of the autonomic nervous system, the others ...

American tennis player Holcombe WardCountry (sports) United StatesBorn(1878-11-23)November 23, 1878New York, NY, United StatesDiedJanuary 23, 1967(1967-01-23) (aged 88)Red Bank, NJ, United StatesTurned pro1895 (amateur tour)Retired1905 (brief comeback in 1917)PlaysRight-handed (one-handed backhand)Int. Tennis HoF1956 (member page)SinglesHighest rankingNo. 1 (1904, ITHF)[1]Grand Slam singles resultsWimbledon1R (1905)US OpenW (1904)DoublesGrand Slam doubles resu...

 

Embassy of the Turkish Republic of Northern Cyprus in Ankara Kuzey Kıbrıs Türk Cumhuriyeti'nin Ankara BüyükelçiliğiLocationAnkaraAddressRabat Sokak No: 20, Gaziosmanpaşa 06700, Ankara, TürkiyeOpening17 April 1984Ambassadorİsmet KorukoğluAmbassador of Northern Cyprus to TurkeyIncumbentİsmet Korukoğlusince 14 September 2022StyleYour ExcellencySeatAnkara, Turkey The Embassy of Northern Cyprus in Ankara is the diplomatic mission of the Turkish Republic of Northern Cyprus to the ...

 

كارلتون سكينر   معلومات شخصية الميلاد 8 أبريل 1913  بالو ألتو، كاليفورنيا  الوفاة 22 يونيو 2004 (91 سنة)   بوسطن  مواطنة الولايات المتحدة  مناصب حاكم غوام   في المنصب17 سبتمبر 1949  – 22 أبريل 1953  الحياة العملية المدرسة الأم جامعة ويسليان  المهنة سياسي،  وضاب...

Medication that decreases stomach acid RanitidineClinical dataTrade namesZantac,[1] othersOther namesDimethyl [(5-{[(2-{[1-(methylamino)-2-nitroethenyl]amino}ethyl)sulfanyl]methyl}furan-2-yl)methyl]amine, ranitidine hydrochloride (JAN JP)AHFS/Drugs.comMonographMedlinePlusa601106License data US DailyMed: Ranitidine US FDA: Ranitidine Pregnancycategory AU: B1[2] Routes ofadministrationBy mouth, intravenous (IV)Drug classHistamine H2 receptor antagonist, ...

 

Musée de la Mine et des Traditions populairesReconstitution d'un habitat minier en 1900.Informations généralesOuverture 1978Surface 300 m2Visiteurs par an 479 (2018)LocalisationAdresse 10, rue Paul-Bert59124 Escaudain, Nord FranceCoordonnées 50° 19′ 58″ N, 3° 20′ 40″ Emodifier - modifier le code - modifier WikidataLe musée de la Mine et des Traditions populaires est un musée ethnographique inauguré en 1978, situé à Escaudain, dans le ...

 

若非特別註明,本條目所有時間皆為東八區標準時間(UTC+8)。 2020年文憑試歷史科爭議試題事件,是指2020年5月的香港中學文憑考試歷史科考試中的一起爭議事件。歷史科考試在5月14日舉行後,該科試卷其中一道涉及中日關係的題目,被指具引導性、美化日本侵華、傷害了在日本侵華戰爭中受到莫大苦難的國民的感情和尊嚴。教聯會、教育局局長楊潤雄、行政長官林鄭月娥...

Untuk kapal lain dengan nama serupa, lihat HMS Illustrious. Illustrious sekitar tahun 1954 Sejarah Britania Raya Nama IllustriousDipesan 13 April 1937Pembangun Vickers-ArmstrongsPasang lunas 27 April 1937Diluncurkan 5 April 1939Mulai berlayar 25 Mei 1940Dipensiunkan Februari 1955Tidak beroperasi Februari 1955Identifikasi Nomor umbul: 87[1]Motto Vox non Incerta (Latin: No Uncertain Voice)[2] Penghargaan Genova 1795, Jalan Basque 1809, Jawa 1811, Taranto 1940, Mediterania 1940...

 

Esports department of football club Manchester City Manchester City EsportsFull nameManchester City EsportsGames FIFA Fortnite Battle Royale FoundedJuly 2016OwnerCity Football GroupPartners FaZe Clan Dubai Expo 2020 Nexen Tire Etisalat Parent groupManchester City F.C.Websitewebsite Active departments ofManchester City Men'sfootballWomen'sfootballAcademy Esports(UK) Esports(China) Esports(Korea) Manchester City Esports is the name of several esports teams owned and operated by Premier League f...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (مايو 2020) الأردن فيSummer Paralympics 1996الرمزJORNPCاللجنة البارالمبية الأردنيةفي أتلانتاالرياضيون5الميدالياتالترتيب 56 ذهبية ...

Para otros usos de este término, véase Monasterio de Sopetrán. Sopetrán Municipio Panorámica de Sopetrán. BanderaEscudo SopetránLocalización de Sopetrán en Colombia SopetránLocalización de Sopetrán en Antioquia Coordenadas 6°30′06″N 75°44′36″O / 6.5016666666667, -75.743333333333Entidad Municipio • País Colombia • Departamento Antioquia • Subregión OccidenteAlcalde Diego Alejandro Villa Valderrama (2020-2023)Eventos históricos  ...

 

A style of dance with acrobatics An elbow stand, performed as part of an acro dance routine Acro dance is a style of dance that combines classical dance technique with precision acrobatic elements. It is defined by its athletic character, its unique choreography, which blends dance and acrobatics, and its use of acrobatics in a dance context.[1] It is a popular dance style in amateur competitive dance as well as in professional dance theater and in contemporary circus productions such...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!