Array ( [0] => 14867182 [id] => 14867182 [1] => cswiki [site] => cswiki [2] => Relokace [uri] => Relokace [3] => [img] => [4] => [day_avg] => [5] => [day_diff] => [6] => [day_last] => [7] => [day_prev_last] => [8] => [oai] => [9] => [is_good] => [10] => [object_type] => [11] => 0 [has_content] => 0 [12] => [oai_cs_optimisticky] => ) Array ( [0] => '''Relokace''' je v [[Informatika|informatice]] metoda, pomocí níž může být [[strojový kód]] umístěn na jiné místo v paměti, než pro které byl [[překladač]]em vytvořen. Adaptaci strojového kódu provádí [[Počítačový program|program]] nazývaný ''locator'' (''umisťovač''), který podle údajů uvedených v ''relokační tabulce'' opraví ve strojovém kódu absolutní adresy skoků a odkazů na data.{{Citace elektronické monografie [1] => | příjmení = Kolář [2] => | jméno = Petr [3] => | odkaz na autora = [4] => | titul = Operační systémy [5] => | url = http://www.nti.tul.cz/~kolar/os/ [6] => | datum vydání = 2005-02-01 [7] => | datum aktualizace = [8] => | datum přístupu = 2008-08-30 [9] => | vydavatel = [10] => | místo = Liberec [11] => | strany = 40, 41 [12] => | url archivu = https://web.archive.org/web/20140714105312/http://www.nti.tul.cz/~kolar/os/ [13] => | datum archivace = 2014-07-14 [14] => | nedostupné = ano [15] => }} [16] => [17] => == Původ == [18] => Starší [[Mikroprocesor|procesory]] nepodporovaly mechanismus [[Virtuální paměť|virtuální paměti]], pomocí kterého je možné vytvořit pro běžící [[Proces (informatika)|proces]] virtuální adresní prostor, který začíná od adresy 0 (nula). Program tak musel být umístěn v paměti od místa, kde začínal volný prostor. Začátek volného prostoru byl však různý podle aktuálních okolností. Proto bylo nutné vytvářet programy tak, aby je bylo možné přizpůsobit libovolnému umístění v paměti. [19] => [20] => V systémech [[DOS]] (též MS-DOS z roku [[1981]]) byla na začátku paměti rezervovaná oblast, za kterou následovalo [[Jádro (informatika)|jádro]] systému. Volná oblast pro programy začínala na různých adresách podle toho, jaké ovladače byly při startu systému zavedeny nebo podle použité verze systému. Procesor [[Intel 8088]] použitý v [[IBM PC kompatibilní|IBM PC a kompatibilních]] počítačích podporoval pouze omezenou [[Segmentace paměti|segmentaci]] (max. velikost segmentu je 64 [[Bajt|kiB]]), virtuální paměť nepodporoval. Programy v souborech s příponou [[COM (soubor)|.COM]], jejichž velikost byla omezena maximální velikostí segmentu na 64 kiB relokovány být nemusely. Programy [[EXE]] obsahují relokační tabulky a [[Zavaděč (program)|zavaděč]] podle ní automaticky provádí relokaci. [21] => [22] => V operačním systému [[OS/360]] s MFT bylo již v roce v roce [[1967]] možné spustit omezený počet programů současně (tzv. [[multitasking]]). Byly pro ně vyhrazeny pevné úseky paměti, do kterých byl kód relokován. [23] => [24] => == Relokační tabulka == [25] => Relokační tabulka obsahuje seznam absolutních adres ve strojovém kódu, které je nutné modifikovat. Adresy v kódu jsou obvykle upraveny tak, aby kód byl funkční při umístění od adresy 0 (nula). Při umístění kódu na jinou adresu (například 100, tzv. bázová adresa) je nutné ke všem adresám uvedeným v relokační tabulce přičíst bázovou adresu. [26] => [27] => == Pozičně nezávislý kód == [28] => Pozičně nezávislý kód ([[Position Independent Code|PIC]]) může být umístěn na libovolnou adresu a přesto si zachovává svoji funkčnost. Využívá [[Strojová instrukce|strojové instrukce]], které používají relativní adresy, jejichž cílová adresa je vztažena k aktuální adrese (uložena v registru [[čítač instrukcí]], PC, IP) nebo jsou využívány bázové adresy, které je možné na začátku vhodným způsobem inicializovat na aktuální pozici kódu v paměti. [29] => [30] => {{Podrobně|Position Independent Code}} [31] => [32] => == Knihovny == [33] => [[Knihovna (programování)|Knihovny]] jsou obvykle přeloženy tak, že jsou přímo bez úprav funkční na jisté adrese. V omezeném adresním prostoru architektury [[IA-32]] ([[32bitový|32bitové]] procesory [[Intel 80386|i386]] a novější) se však často stane, že loader při umisťování do paměti narazí na kolizi, která vede k relokaci dynamické knihovny a tím drobnému zpoždění při spuštění programu a zároveň k nemožnosti sdílení původní kopie knihovny, která je již v paměti umístěna (relokace způsobí, že se kód liší). Proto je výhodnější, aby byly bázové adresy knihoven pečlivě voleny. V [[Microsoft Windows]] určuje toto rozmístění sama firma [[Microsoft]], která jej provádí s ohledem na své vlastní programy, které tak mohou startovat rychleji. V [[UN*X|unixovém]] systému [[Linux]] je k dispozici speciální nástroj [[prelink]], který může po každé [[Aktualizace (software)|aktualizaci]] systému vypočítat ideální rozmístění všech knihoven systému a obratem ji aplikovat (knihovny „předrelokovat“). V systému [[OS X|Mac OS X]] je tato činnost nazývána [[prebinding]]. [34] => [35] => == Vznik binárky == [36] => [[Překladač]] vytváří [[strojový kód]], který je vytvořen pro běh na určité adrese. Překladač [[C (programovací jazyk)|programovacího jazyka C]] vytváří nejprve [[objektový kód]] ({{Vjazyce2|en|''object code''}}), který je pozičně nezávislý, protože obsahuje symbolické reference, které je možné přizpůsobit zvolenému umístění v paměti. Spojení více objektových kódů a tím vytvoření spustitelného souboru zajišťuje [[linker]], jehož úkolem je vyřešit (vyčíslit) všechny symbolické adresy, což je typicky prováděna ve dvou krocích: [37] => [38] => # kód každého objektu má různé sekce jako ''kód segmentu'', ''data segmentu'', ''.bss'' apod. Ke kombinaci všech těchto objektů do jediného spustitelného souboru, linker připojí všechny sekce podobných typů do jedné sekce téhož typu. Linker poté přiděluje běhové adresy každé sekci a každému symbolu. V tomto bodě má kód (funkce) i data (globální proměnné) unikátní běhové adresy. [39] => # každá sekce odkazuje na jeden nebo více symbolů, které by měly být modifikovány tak, aby mohly ukazovat na správné adresy. [40] => [41] => Výsledný kód se obvykle vytváří tak, aby byl funkční při umístění od adresy 0 (nula). Zároveň je vytvořena relokační tabulka, která umožňuje relokaci výsledného kódu na alternativní adresu. Relokační tabulka se připojuje do výsledného spustitelného souboru. [42] => [43] => == Náhodné umístění v paměti == [44] => Možnost relokace se využívá ke zvýšení odolnosti systému proti útokům pomocí přepsání části paměti (např. [[přetečení na zásobníku]]). Při této metodě ochrany je strojový kód umístěn na náhodně zvolenou adresu. Na [[32bitový|32bitovém]] systému jsou možnosti náhodného umístění silně omezeny, zatímco [[64bitový|64bitové]] systémy ji mohou využít efektivněji.{{Citace elektronické monografie | url=http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf | formát=PDF | titul=An Analysis of Address Space Layout Randomization on Windows Vista | autor=Ollie Whitehouse | měsíc=February | rok=2007 | datum přístupu=2010-05-19 | url archivu=https://web.archive.org/web/20110607144242/http://www.symantec.com/avcenter/reference/Address_Space_Layout_Randomization.pdf | datum archivace=2011-06-07 | nedostupné=ano }} Útočník pak předem neví ani přibližné umístění kódu v paměti, což útok činí obtížnějším. Zabezpečení používají systémy [[Windows Vista]] a novější pod názvem [[Address space layout randomization]] (ASLR). V Linuxu existuje podobná možnost implementovaná pod názvem [[Exec Shield]].{{Citace elektronické monografie | url=http://www.redhat.com/f/pdf/rhel/WHP0006US_Execshield.pdf | titul=New Security Enhancements in Red Hat Enterprise Linux v.3, update 3 | datum přístupu=2007-10-18 | příjmení=van de Ven | jméno=Arjan | datum=2004-08 | formát=PDF | edice=Red Hat, Inc. | url archivu=https://web.archive.org/web/20050512030425/http://www.redhat.com/f/pdf/rhel/WHP0006US_Execshield.pdf | datum archivace=2005-05-12 | nedostupné=ne }}{{Citace elektronického periodika [45] => | příjmení = Cobbert [46] => | titul = Address space randomization in 2.6 [47] => | periodikum = LWN.net [48] => | datum vydání = 2005-02-02 [49] => | datum přístupu = 2010-05-20 [50] => | url = http://lwn.net/Articles/121845/ [51] => }} [52] => [53] => == Reference == [54] => [55] => [56] => == Související články == [57] => * [[Linker]] [58] => * [[Knihovna (programování)]] [59] => * [[Position Independent Code]] [60] => {{Autoritní data}} [61] => [62] => [[Kategorie:Programové knihovny]] [] => )
good wiki

Relokace

Relokace je v informatice metoda, pomocí níž může být strojový kód umístěn na jiné místo v paměti, než pro které byl překladačem vytvořen. Adaptaci strojového kódu provádí program nazývaný locator (umisťovač), který podle údajů uvedených v relokační tabulce opraví ve strojovém kódu absolutní adresy skoků a odkazů na data.

More about us

About

Expert Team

Vivamus eget neque lacus. Pellentesque egauris ex.

Award winning agency

Lorem ipsum, dolor sit amet consectetur elitorceat .

10 Year Exp.

Pellen tesque eget, mauris lorem iupsum neque lacus.

You might be interested in

,'strojový kód','Knihovna (programování)','Position Independent Code','32bitový','Address space layout randomization','DOS','Intel 80386','IA-32','čítač instrukcí','1967','Aktualizace (software)','překladač'