2010-01-12 21 views
5

Patrzę na model pamięciowy IA-32 systemu Linux i mam do niego proste pytanie. Co zawierają szare obszary na zdjęciu? Czy są one uwzględnione tylko w celu pokazania początku i końca pamięci? Więc, czy tekst zaczyna się od 0x0, a początek stosu to 0xFFFFFFFF?Model pamięci IA-32 Linuksa

Po ponownym otwarciu: Witam, w kursie systemu operacyjnego, w którym będę uczestniczyć, to pytanie staje się ponownie aktualne. W szczególności muszę wiedzieć, co zawierają szare obszary. Na podstawie dotychczasowych odpowiedzi widzę, że zawiera on kod jądra na górze i stronę z dereferencją o zerowym wskaźniku na dole. Ale czym jest kod jądra? Nie zakładam, że jest to cały system operacyjny, ale czy może to być wbudowany program planujący, wywołania biblioteki jądra lub?

poważaniem, Lasse Espeholt

alt text http://img403.imageshack.us/img403/3156/capturecj.png

Odpowiedz

9

myślę, że to jest bardziej precyzyjne: alt text

+0

Ahh wydaje się mieć sens;) Ale zgodnie z tym procesem wykresy mają tylko ~ 1GB RAM do pracy. (0xC0000000 - 0x80480000), ale może wzrosnąć do wirtualnej pamięci jądra? –

+1

To 0x08048000, a nie 0x80480000. To trochę mniej niż 3 GB. – wj32

+0

Ahh mój zły, dzięki :) –

5

Myślę, że po prostu szare obszary stanowią obszary o nieokreślonej wielkości. Tekst programu na pewno nie zaczynał się od 0x0, ponieważ większość systemów operacyjnych używa ich jako niepoprawnych stron, dzięki czemu można łatwo złapać puste opcje dereferencji. Stosy wątków również nie przeszłyby aż do 0xffffffff, ponieważ zazwyczaj w pierwszym kwartale (lub w połowie) pamięć jądra jest na nią odwzorowana.

+0

zerowe odwołanie ma wiele sensu;) dziękuję. –

2

Należy zauważyć, że obszar zerowej strona u dołu przestrzeni adresowej jest nie faktycznie zakazano używania aplikacji w ramach wspólnych dystrybucjach Linuksa. Jądro to wykorzystywało, a następnie przerzuciło tę decyzję na moduł LSM (np. SELinux, AppArmor). I nie wymuszali tej samej reguły, więc okazało się, że procesy mogą mapować pamięć na 0x0. Było to częścią luki za najnowszymi exploitami "jądra zerowego wskaźnika dereferencji".

+0

'/ proc/sys/vm/mmap_min_addr' jest domyślnie ustawione na niezerową wartość jądra wanilii, więc ma to znaczenie tylko w przypadku dystrybucji, która ją zmienia lub używa LSM. Nie wiem, jak powszechne jest to; Debian tego nie robi, Ubuntu tego nie robi (chyba że Wine jest zainstalowane), Gentoo nie, ... i to są wszystkie dystrybucje, których używam. – ephemient

+0

Fedora i Red Hat domyślnie włączają SELinux. Novell/SuSE wysyła AppArmor, podobnie jak Ubuntu w najnowszych wersjach. LSM jest bardziej regułą niż wyjątkiem we współczesnym świecie, i jak się okazało, skutkowało to regresją w ochronie zerowej strony. –

3

Nikt chyba nie wspomniał, że nie cała pamięć w dostępnej przestrzeni jest koniecznie zamapowana (i prawie nigdy nie jest).