Przeprowadzka (informatyka)
Relokacja to proces przypisywania adresów obciążenia dla zależnego od pozycji kodu i danych programu oraz dostosowywania kodu i danych w celu odzwierciedlenia przypisanych adresów. Przed pojawieniem się systemów wieloprocesowych, a nadal w wielu systemach wbudowanych, adresy obiektów zaczynały się bezwzględnie od znanej lokalizacji, często zera. Ponieważ systemy wieloprocesorowe dynamicznie łączą i przełączają się między programami, konieczna stała się możliwość przenoszenia obiektów przy użyciu kodu niezależnego od pozycji . Linker zwykle wykonuje relokację w połączeniu z rozpoznawaniem symboli , proces wyszukiwania plików i bibliotek w celu zastąpienia symbolicznych odniesień lub nazw bibliotek rzeczywistymi, użytecznymi adresami w pamięci przed uruchomieniem programu.
Relokacja jest zwykle wykonywana przez linker w czasie łączenia , ale może być również wykonana w czasie ładowania przez relokujący program ładujący lub w czasie wykonywania przez sam działający program . W niektórych architekturach całkowicie unika się relokacji, odraczając przypisanie adresu do czasu wykonania; jak na przykład w maszynach stosowych z zerową arytmetyką adresów lub w niektórych architekturach segmentowych, w których każda jednostka kompilacji jest ładowana do osobnego segmentu.
Segmentacja
Pliki obiektowe są podzielone na różne typy segmentów pamięci . Przykładowe segmenty obejmują segment kodu (.text) , zainicjowany segment danych (.data) , niezainicjowany segment danych (.bss) i inne. [ potrzebne wyjaśnienie ]
Tabela relokacji
Tablica relokacji to lista wskaźników utworzona przez tłumacza ( kompilator lub asembler ) i przechowywana w obiekcie lub pliku wykonywalnym. Każdy wpis w tabeli, czyli „naprawa”, jest wskaźnikiem do adresu bezwzględnego w kodzie wynikowym, który należy zmienić, gdy moduł ładujący przeniesie program, tak aby odnosił się on do właściwej lokalizacji. Poprawki mają na celu umożliwienie przeniesienia programu jako kompletnej jednostki. W niektórych przypadkach każda poprawka w tabeli jest sama względna w stosunku do adresu bazowego równego zero, zatem same poprawki muszą zostać zmienione w miarę poruszania się modułu ładującego po tabeli.
W niektórych architekturach poprawka, która przekracza pewne granice (takie jak granica segmentu) lub która nie jest wyrównana do granicy słowa, jest nielegalna i oznaczana przez linker jako błąd.
DOS i 16-bitowy Windows
Dalekie wskaźniki ( 32-bitowe wskaźniki z segmentem :offset, używane do adresowania 20-bitowej przestrzeni pamięci o pojemności 640 KB dostępnej dla programów DOS-owych ), które wskazują na kod lub dane w pliku wykonywalnym DOS ( EXE ), nie mają segmentów bezwzględnych, ponieważ rzeczywisty adres kodu/danych zależy od tego, gdzie program jest załadowany do pamięci i nie jest on znany do momentu załadowania programu.
Zamiast tego segmenty są wartościami względnymi w pliku DOS EXE. Segmenty te należy poprawić po załadowaniu pliku wykonywalnego do pamięci. Program ładujący EXE korzysta z tabeli relokacji, aby znaleźć segmenty, które wymagają dostosowania.
32-bitowy system Windows
W 32-bitowych systemach operacyjnych Windows udostępnianie tabel relokacji dla plików EXE nie jest obowiązkowe, ponieważ są one pierwszym obrazem ładowanym do wirtualnej przestrzeni adresowej i dlatego zostaną załadowane pod preferowanym adresem bazowym.
Zarówno w przypadku bibliotek DLL, jak i plików EXE, które zdecydowały się na randomizację układu przestrzeni adresowej (ASLR), technikę ograniczania exploitów wprowadzoną w systemie Windows Vista , tabele relokacji ponownie stają się obowiązkowe ze względu na możliwość dynamicznego przenoszenia pliku binarnego przed wykonaniem, nawet jeśli są nadal pierwszą rzeczą ładowaną w wirtualnej przestrzeni adresowej.
64-bitowy system Windows
Podczas uruchamiania natywnych 64-bitowych plików binarnych w systemie Windows Vista i nowszych, ASLR jest obowiązkowy [ potrzebne źródło ] , dlatego kompilator nie może pominąć sekcji relokacji.
Systemy typu Unix
Format pliku wykonywalnego i format biblioteki współdzielonej (ELF) Executable and Linkable Format (ELF) używany w większości systemów uniksowych umożliwia zdefiniowanie kilku typów relokacji.
Procedura relokacji
Linker odczytuje informacje o segmentach i tabele relokacji z plików obiektowych i dokonuje relokacji poprzez:
- łączenie wszystkich segmentów wspólnego typu w jeden segment tego typu
- przypisanie unikalnych adresów wykonawczych do każdej sekcji i każdego symbolu, nadanie całemu kodowi (funkcjom) i danym (zmiennym globalnym) unikalnych adresów wykonawczych [ potrzebne wyjaśnienie ]
- odnosząc się do tabeli relokacji , aby zmodyfikować [ dlaczego? ] , tak aby wskazywały prawidłowe [ wymagane wyjaśnienie ] adresy czasu wykonania.
Przykład
Poniższy przykład wykorzystuje architekturę MIX Donalda Knutha i język asemblera MIXAL. Zasady są takie same dla każdej architektury, choć szczegóły ulegną zmianie.
- (A) Program SUBR jest kompilowany w celu utworzenia pliku obiektowego (B), pokazanego zarówno jako kod maszynowy, jak i asembler. Kompilator może uruchomić skompilowany kod w dowolnej lokalizacji, często w lokalizacji 1, jak pokazano. Lokalizacja 13 zawiera kod maszynowy dla instrukcji skoku do instrukcji ST w lokalizacji 5.
- (C) Jeśli SUBR zostanie później połączony z innym kodem, może zostać zapisany w lokalizacji innej niż 1. W tym przykładzie linker umieszcza go w lokalizacji 120. Adres w instrukcji skoku, który znajduje się teraz w lokalizacji 133, musi zostać przeniesiony aby wskazać nową lokalizację kodu instrukcji ST , teraz 125. [1 61 pokazane w instrukcji to reprezentacja 125 w kodzie maszynowym MIX].
- (D) Kiedy program jest ładowany do pamięci w celu uruchomienia, może zostać załadowany w innym miejscu niż to przypisane przez linker. W tym przykładzie SUBR znajduje się teraz w lokalizacji 300. Adres w instrukcji skoku, obecnie pod adresem 313, musi zostać ponownie przeniesiony, tak aby wskazywał zaktualizowaną lokalizację ST , 305. [4 49 to reprezentacja maszyny MIX dla 305].
Zobacz też
- Linker (obliczenia)
- Biblioteka (informatyka)
- Plik obiektowy
- Wstępne wiązanie
- Biblioteka statyczna
- Samodzielna relokacja
- Kod niezależny od pozycji (PIC)
- Rebazowanie
- Zbieranie śmieci
- Swizzling wskaźnika , leniwa forma modyfikacji wskaźnika
- Format modułu obiektu relokowalnego
Dalsza lektura
- Johnson, Glenn (21.12.1975) [13.11.1975]. 11/34 Zarządzanie pamięcią Podstawowy test logiki . Firma Digital Equipment Corporation (DEC). MAINDEC-11-DFKTA-AD . Źródło: 19.08.2017 .
- Formaniak, Piotr G.; Leitch, David (lipiec 1977). „Proponowany standard oprogramowania mikroprocesorowego” . BYTE – dziennik małych systemów . Forum Techniczne. Tom. 2, nie. 7. Peterborough, New Hampshire, USA: Byte Publications, Inc., s. 34, 62–63. arka:/13960/t32245485 . Źródło 2021-12-06 . (3 strony) (NB. Opisuje przenoszony format szesnastkowy autorstwa Mostka .)
- Ogdin, Carol Anne; Colvin, Neil; Pittman, Tom; Tubb, Philip (listopad 1977). „Relokowalne formaty kodu obiektowego” . BYTE – dziennik małych systemów . Forum Techniczne. Tom. 2, nie. 11. Peterborough, New Hampshire, USA: Byte Publications, Inc. , s. 198–205. arka:/13960/t59c88b4h, arka:/13960/t3kw76j24 . Źródło 2021-12-06 . (8 stron) (NB. Opisuje format szesnastkowy z możliwością przenoszenia przez TDL .)
- Kildall, Gary Arlen (luty 1978) [1976]. „Prosta technika statycznej relokacji absolutnego kodu maszynowego” . Dziennik kalisteniki komputerowej i ortodoncji dr Dobba . Ludowa Firma Komputerowa . 3 (2): 10–13 (66–69). ISBN 0-8104-5490-4 . #22 arka:/13960/t8hf1g21p . Źródło: 19.08.2017 . [4] [5] [6] . Pierwotnie zaprezentowany pod adresem: Kildall, Gary Arlen (1977) [22–24 listopada 1976]. „Prosta technika statycznej relokacji absolutnego kodu maszynowego”. Napisano w Naval Postgraduate School w Monterey, Kalifornia, USA. W Tytusie, Harold A. (red.). Zapis konferencji: Dziesiąta doroczna konferencja Asilomar na temat obwodów, systemów i komputerów: artykuły przedstawione 22–24 listopada 1976 r . Konferencja Asilomar na temat sygnałów, systemów i komputerów . Asilomar Hotel and Conference Grounds, Pacific Grove, Kalifornia, USA: Western Periodicals Company. s. 420–424. ISSN 1058-6393 . Źródło 2021-12-06 . (609 stron). (Tę metodę „zmiany rozmiaru”, zwaną relokacją granic strony , można zastosować statycznie do obrazu dysku CP/M-80 przy użyciu MOVCPM w celu zmaksymalizowania TPA dla uruchamiania programów. Była ona również wykorzystywana dynamicznie przez CP/M-80 Debugger M Dynamic Debugging Tool (DDT) do przenoszenia się do wyższej pamięci.To samo podejście zostało niezależnie opracowane przez Bruce'a H. Van Nattę z IMS Associates w celu uzyskania relokowalnego PL/M kod. Jako relokacja granic akapitu inny wariant tej metody został później wykorzystany przez dynamicznie przemieszczające się TSR HMA , takie jak KEYB , SHARE i NLSFUNC w systemie DR DOS 6.0 i nowszych. Znacznie bardziej wyrafinowana, szczegółowa metoda na poziomie bajtów, oparta na nieco podobnym podejściu, została niezależnie opracowana i wdrożona przez Matthiasa R. Paula i Axela C. Frinke w celu dynamicznej eliminacji martwego kodu aby dynamicznie minimalizować ślad czasu działania sterowników rezydentnych i TSR (takich jak FreeKEYB).)
-
Libes, Sol, wyd. (1980–1981). „nieznane” . Mikrosystemy S-100 . Tom. 1. Mountainside, New Jersey, USA: Libes Inc. 54 . Źródło 2021-12-06 .
{{ cite news }}
: Cite używa ogólnego tytułu ( pomoc ) -
Huitt, Robert; Eubanks, Gordon ; Rolander, Thomas „Tom” Alan ; Prawa, David; Michel, Howard E.; Halla, Brian; Whartona, Johna Harrisona ; Berga, Briana; Su, Weilian; Kildall, Scott ; Kampe, Bill (25.04.2014). Prawa, David (red.). „Dziedzictwo Gary’ego Kildalla: poświęcenie kamienia milowego CP/M IEEE” (PDF) (transkrypcja wideo). Pacific Grove, Kalifornia, USA: Muzeum Historii Komputerów . Numer referencyjny CHM: X7170.2014. Zarchiwizowane (PDF) od oryginału w dniu 27.12.2014 r . Pobrano 19.01.2020 .
[…] Przepisy: […] „dynamiczna relokacja” systemu operacyjnego. Czy możesz nam powiedzieć, co to jest i dlaczego było to ważne? […] Eubanks : […] to, co zrobił Gary […] było […] zadziwiające. […] Pamiętam ten dzień w szkole , kiedy wbiegł do laboratorium i powiedział: „Wymyśliłem, jak się przenieść”. Wykorzystał fakt, że jedynym bajtem zawsze był bajt o najwyższym znaczeniu . I tak stworzył bitmapę . […] nie miało znaczenia, ile pamięci miał komputer, system operacyjny zawsze można było przenieść do dużej pamięci. Dlatego można to skomercjalizować […] na komputerach o różnej ilości pamięci. […] nie można sprzedawać 64 tys. CP/M i 47 tys. CP/M. Trudność kompilacji adresów byłaby po prostu śmieszna. Więc Gary wpadł na to pewnej nocy, prawdopodobnie w środku nocy, myśląc o jakimś kodowaniu, i to naprawdę umożliwiło komercjalizację CP/M. Naprawdę myślę, że bez tej przeprowadzki byłby to bardzo trudny problem. Nakłonienie ludzi do zakupu wydawałoby się im skomplikowane, a jeśli dodałbyś więcej pamięci, musiałbyś kupić inny system operacyjny. […] Intel […] odwrócił bajty , prawda, dla adresów pamięci. Ale zawsze były w tym samym miejscu, więc można było je przenieść na inny adres Mówiąc ściślej, granica 256 bajtów . Dlatego zawsze można go przenieść za pomocą mapy bitowej pokazującej, gdzie te […] Prawa: Z pewnością najbardziej wymowne wyjaśnienie dynamicznej relokacji, jakie kiedykolwiek miałem […] [
7] [8] (33 strony) - Lieber, Eckhard; von Massenbach, Thomas (1987). „CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M”. c't - magazin für Computertechnik (część 1) (w języku niemieckim). Heise Verlag . 1987 (1): 124–135; Lieber, Eckhard; von Massenbach, Thomas (1987). „CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M”. c't - magazin für Computertechnik (część 2) (w języku niemieckim). Heise Verlag . 1987 (2): 78–85; Huck, Alex (09.10.2016). „RSM dla CP/M 2.2” . Komputer domowy DDR (w języku niemieckim). Zarchiwizowane od oryginału w dniu 25.11.2016 r . Źródło: 25.11.2016 .
-
Guzis, Charles „Chuck” P. (16.03.2015). „Re: Programowanie w języku asemblera CP/M” . Forum starych komputerów . Gatunek: CP/M i MP/M. Zarchiwizowane od oryginału w dniu 2020-02-01 . Źródło: 2020-02-01 .
[…] Czy zastanawiałeś się kiedyś, jak działa MOVCPM ? Ponieważ BDOS i CCP znajdują się w dużej pamięci, nad aplikacją użytkownika, adresy muszą być zmieniane za każdym razem, gdy zmienia się rozmiar pamięci systemu. Teraz wymaga to przeniesienia adresów w 8080 kodu, ponieważ adresowanie względne nie jest częścią sprzętu. Bez implementowania pełnowymiarowego asemblera i modułu ładującego do przenoszenia, jak sobie z tym poradzić? Jest to właściwie całkiem sprytne i MP/M nawet używa tego schematu do konstruowania plików, które można przenosić na strony. Po prostu asemblujesz program źródłowy dwukrotnie , przy czym początek drugiego zestawu jest o 100H (256 bajtów) wyższy niż pierwszy. Następnie porównuje się dwa obrazy binarne, bajt po bajcie, i tworzy mapę zbudowany z par bajtów różniących się wartością dokładnie o 100H. Wynikiem jest lista lokalizacji, w których należy dostosować wartość relokacji, jeśli ma zostać przeniesiona lokalizacja programu w pamięci. MP/M nazywa ten rodzaj plików PRL (przenoszenie stron), ale nie wiem, czy CP/M 2.2 kiedykolwiek wymyślił dla tego nazwę. […]
-
Guzis, Charles „Chuck” P. (29.07.2015). „Re: Jak działa MOVCPM.COM?” . Forum starych komputerów . Gatunek: CP/M i MP/M. Zarchiwizowane od oryginału w dniu 2020-02-01 . Źródło: 2020-02-01 .
[…] MOVCPM wykorzystuje wczesny typ formatu PRL. Zasadniczo CP/M jest montowany dwukrotnie; drugi raz to przesunięcie 100H bajtów. Obydwa pliki binarne są porównywane i mapa bitowa . Ustawiony bit oznacza, że jest to bajt wyższego rzędu adresu ma zostać skorygowany. Nie ma to wpływu na bajty adresowe o niższym poziomie ważności; stąd „plik, który można przenieść na stronę”. Każdy bajt mapy bitowej odpowiada 8 bajtom danych binarnych. […] Zatem wszystko, co ma zostać przeniesione w MOVCPM, jest częścią obrazu i jego bitmapy relokacji. […]
-
Guzis, Charles „Chuck” P. (08.11.2016). „Re: Czy bezpieczne jest używanie RST 28h w programach montażowych CP/M?” . Forum starych komputerów . Gatunek: CP/M i MP/M. Zarchiwizowane od oryginału w dniu 2020-02-01 . Źródło: 2020-02-01 .
[…] Odwoływałem się do plików PRL i tego, jak zaczęły się one od MOVCPM , ale stały się integralną częścią MP/M i CP/M 3.0 . Ale pliki PRL używają mapy bitowej w którym każdy bit odpowiada lokalizacji w pamięci; jeden bit wskazuje, że do odpowiedniego miejsca w pamięci należy dodać przesunięcie strony. Jeśli masz bardzo mało odniesień do pamięci bezwzględnej (w przeciwieństwie do względnych), możesz zastosować listę wskaźników (2 bajty na odniesienie) zamiast mapy bitowej. Jest to mało prawdopodobne w 8080 , który nie ma względnych skoków, ale może być brany pod uwagę w przypadku kodu Z80 . Sztuczka pozwalająca szybko się o tym przekonać, polega na dwukrotnym złożeniu programu; drugi czas przesunięty o 100H, następnie porównaj dwa pliki binarne. Zaleta czasu działania relokacja polega na tym, że nie musisz ponosić kary za kod próbujący obejść problem relokacji — żadnych „sztuczek”; po prostu napisz prosty kod. […]
- Roth, Richard L. (luty 1978) [1977]. „Relokacja to nie tylko przenoszenie programów” . Dziennik kalisteniki komputerowej i ortodoncji dr Dobba . Ridgefield, Kalifornia, USA: Ludowa firma komputerowa . 3 (2): 14–20 (70–76). ISBN 0-8104-5490-4 . #22. Zarchiwizowane od oryginału w dniu 20.04.2019 r . Źródło: 19.04.2019 .
- Calingaert, Peter (1979) [1978-11-05]. „8.2.2 Przenoszenie modułu ładującego”. Napisano na Uniwersytecie Karoliny Północnej w Chapel Hill . W Horowitz, Ellis (red.). Asemblery, kompilatory i tłumaczenie programów . Seria inżynierii oprogramowania komputerowego (pierwszy druk, pierwsze wydanie). Potomac, Maryland, USA: Computer Science Press, Inc. s. 237 –241. ISBN 0-914894-23-4 . ISSN 0888-2088 . LCCN 78-21905 . Źródło 2020-03-20 . (2+XIV+270+6 stron)
- Format pliku Microsoft OBJ . Microsoft , usługi wsparcia produktu. Nota aplikacyjna SS0288. Zarchiwizowane od oryginału w dniu 2017-09-09 . Źródło: 21.08.2017 .
- Tanenbaum, Andrew Stuart ; Bos, Herbert (2015). Nowoczesne systemy operacyjne (4 wyd.). Pearson Education Inc. ISBN 978-0-13359162-0 .
-
Elliott, John C. (05.06.2012) [02.01.2000]. „format pliku PRL” . seasip.info . Zarchiwizowane od oryginału w dniu 26.01.2020 r . Źródło : 26.01.2020 .
[…] Plik PRL to relokowalny plik binarny, używany przez MP/M i CP/M Plus dla różnych modułów innych niż pliki .COM . Format pliku jest również używany w przypadku plików FID na komputerze Amstrad PCW . Istnieje kilka formatów plików korzystających z wersji PRL: SPR (System PRL), RSP (Resident System Process). LINK-80 może również produkować OVL ( nakładka ), które mają nagłówek PRL, ale nie można ich relokować. Sterowniki GSX są w formacie PRL; podobnie jak rozszerzenia systemu rezydentnego (.RSX). […]
[9] -
Elliott, John C. (05.06.2012) [02.01.2000]. „Format Microsoft REL” . seasip.info . Zarchiwizowane od oryginału w dniu 26.01.2020 r . Źródło : 26.01.2020 .
[…] Format REL jest generowany przez M80 firmy Microsoft i RMAC firmy Digital Research . […]
-
feilipu (2018-09-05) [2018-09-02]. „Wsparcie dla PRL, plik wykonywalny z możliwością przenoszenia stron dla MP/M” . z88dk . Zarchiwizowane od oryginału w dniu 2020-02-01 . Źródło : 26.01.2020 .
[…] Ze zgromadzonych plików Microsoft .REL linker musi wygenerować plik wykonywalny w formacie .PRL dla MP/M . Format .PRL jest zasadniczo plikiem .COM z dodatkowymi informacjami umożliwiającymi przeniesienie programu i jego danych na dowolną stronę. Jak wygląda plik .PRL? Pierwsze bajty określają rozmiar programu, po którym następuje początek programu w 0x0100. Do programu dołączona jest maska bit po bajcie, która pozwala systemowi MP/M dowiedzieć się, które bajty w programie należy zmienić w przypadku przeniesienia programu. Jak linker to robi bez demontażu całej aplikacji? Z góry program jest powiązany z dwoma różnymi źródłami 0x0100 i 0x0200 z obiektów .REL. Sztuczka linkera polega po prostu na rozpoznaniu, które bajty w dwóch wersjach pliku wykonywalnego różnią się. Te bajty są następnie zapisywane w masce bitowej przechowywanej po pliku wykonywalnym, a końcowy program .PRL jest zaprojektowany tak, aby działał od 0x0100 plus jego przesunięcie strony. Ta sama sztuczka jest wykonywana dla plików wykonywalnych .RSP i .SPR, z tą różnicą, że oba te formaty rezygnują z przesunięcia i działają od 0x0000 plus przesunięcie strony. […]
- Bracia, Hardin (kwiecień 1983). „Zrozumienie kodu relokowalnego” . 80 mikro . Następny krok. 1001001, Inc. (39): 38 , 40, 42, 45. ISSN 0744-7868 . Źródło : 2020-02-06 . [10] [11]
- Bracia, Hardin (kwiecień 1985). „Programy przenoszone: włóczęgi mikrokomputerów” . 80 mikro . Następny krok. CW Communications/Peterborough, Inc. (63): 98 , 100, 102–103. ISSN 0744-7868 . Źródło : 2020-02-06 . [12] [13]
- Sage, Jay (maj – czerwiec 1988). Carlson, sztuka (red.). „ZCPR 3.4 - Programy typu 4” . The Computer Journal (TCJ) — programowanie, wsparcie dla użytkowników, aplikacje . Narożnik ZCPR3. Columbia Falls, Montana, USA (32): 10 –17 [ 15 –16]. ISSN 0748-9331 . arka:/13960/t1wd4v943 . Źródło 2021-11-29 . [14] [15]
- Mitchell, Bridger (lipiec – sierpień 1988). Carlson, sztuka (red.). „Z3PLUS i relokacja - Informacje o ZCPR3PLUS i sposobie pisania samorelokującego się kodu Z80” . The Computer Journal (TCJ) — programowanie, wsparcie dla użytkowników, aplikacje . Zaawansowane CP/M. Columbia Falls, Montana, USA (33): 9 –15. ISSN 0748-9331 . arka:/13960/t36121780 . Źródło : 2020-02-09 . [16] [17]
- Sage, Jay (wrzesień – październik 1988). Carlson, sztuka (red.). „Więcej o kodzie relokacyjnym, plikach PRL, programach ZCPR34 i Type-4” . The Computer Journal (TCJ) — programowanie, wsparcie dla użytkowników, aplikacje . Narożnik ZCPR3. Columbia Falls, Montana, USA (34): 20–25 . ISSN 0748-9331 . arka:/13960/t0ks7pc39 . Źródło : 2020-02-09 . [18] [19] [20]
- Sage, Jay (styczeń – luty 1992). Carlson, sztuka; McEwen, Chris (red.). „Dziesięć lat ZCPR” . The Computer Journal (TCJ) — programowanie, wsparcie dla użytkowników, aplikacje . Narożnik Z-System. S. Plainfield, New Jersey, USA: Socrates Press (54): 3–7 . ISSN 0748-9331 . arka:/13960/t89g6n689 . Źródło 2021-11-29 . [21] [22] [23]
- Sage, Jay (maj – czerwiec 1992) [marzec – czerwiec 1992]. Carlson, sztuka; McEwen, Chris (red.). „Programy typu 3 i typu 4” . The Computer Journal (TCJ) — programowanie, wsparcie dla użytkowników, aplikacje . Narożnik Z-System - kilka nowych zastosowań programów typu 4. S. Plainfield, New Jersey, USA: Socrates Press (55): 13–19 . ISSN 0748-9331 . arka:/13960/t4dn54d22 . Źródło 2021-11-29 . [24] [25]
- Ganssle, Jack (luty 1992). „Pisanie kodu relokowalnego — niektóre osadzone kody muszą działać pod więcej niż jednym adresem” . Programowanie systemów wbudowanych . Grupa Ganssle - Doskonalenie sztuki budowania systemów wbudowanych / TGG. Zarchiwizowane od oryginału w dniu 2019-07-18 . Źródło 2020-02-20 .