2010-08-26 17 views
5

Czy ktoś może wskazać mi jakąś dokumentację na mapach pamięci wirtualnej używanych dla Linuksa i Windowsa. Rozumiem przez to, jakie wirtualne adresy, kod, zapisywalne dane statyczne, stos i sterty (wraz z innymi bitami jądra) będą zwykle umieszczane w typowym procesie?Procesowa mapa pamięci (Linux Windows)

Odpowiedz

2

Prawdopodobnie najlepszym sposobem uzyskania mapy pamięci procesowej w systemie Linux jest przejrzenie pliku/proc // maps. Widać wyraźnie, że dla każdego pliku wykonywalnego lub współdzielonego istnieją osobne sekcje dla wykonywalnego, stałego statycznego i zapisywalnego statycznego. Każda z tych sekcji istnieje na swojej własnej stronie pamięci, która pozwala Linuxowi na dzielenie sekcji między plikami wykonywalnymi, a nawet zaimplementowanie funkcji takich jak kopiowanie przy zapisie.

Oprócz tego istnieje sekcja poświęcona stosowi i jedna poświęcona sterty. Mogą również istnieć sekcje anonimowe.

2

Od czasu pojawienia się ASLR, jest to głównie losowy adres wirtualny.

+0

Czy są to faktyczne sekcje bloków, czy też w jaki sposób funkcje relokowalne są zorganizowane w samym bloku kodu? – doron

+0

To mapowania pamięci, które w przybliżeniu odpowiadają segmentom kodu, danych i stosu. – ninjalj

1

Wpis w Wikipedii pod numerem Address Space Layout Randomisation (ALSR) opisuje, w jaki sposób losowa alokacja przestrzeni adresowej chroni przed różnymi atakami oraz jak ważna jest różnica między danymi i kodem.

Opisuje on zarówno domyślny słaby poziom randomizacji Linuksa, jak i łatę, której można użyć, aby ją wzmocnić.

Opisuje także, które wersje systemu Windows go oferują, i jak to ma zastosowanie tylko do niektórych plików wykonywalnych kodu &.

+0

Jest dość mało szczegółów. W miarę możliwości lubię schematy z adresami. – doron

+0

Jeśli szukasz mapy pamięci podobnej do dawnych czasów, na przykład Commodore 64 (takiego jak ten http://sta.c64.org/cbm64mem.html), myślę, że wyjdziesz na zewnątrz szczęścia. Nie sądzę, że to już działa. – Oddthinking

Powiązane problemy