MPROTECT SYSTEMOWE WYKOWIENIEN W C

MPROTECT SYSTEMOWE WYKOWIENIEN W C

Połączenie systemowe mprotect () w C zostało użyte do określenia lub zmiany wymaganej ochrony dla strony pamięci procesu. Ta strona (y) pamięci zawiera udział lub cały zakres adresów w przedziale: [addr, addr+len-1]. Spójrzmy na wywołanie systemowe mprotect (), aby zobaczyć, jak to działa i jest używane podczas korzystania z programu strony pamięci w Ubuntu 20.04 System. Zaloguj się z Ubuntu 20.04 System i uruchom konsolę Shell na komputerze Ctrl+Alt+T.

Przykład 01:

Miejmy nasz pierwszy przykład wywołania systemu mprotect (). Utwórz plik typu C w systemie w terminalu za pomocą zapytania „dotyk” zgodnie z określonym obrazem wyjściowym.

$ touch mprotect1.C

Teraz plik został poprawnie utworzony, otwórz go w ramach jakiegoś edytora, takiego jak GNU lub VIM. Mamy zainstalowany i skonfigurowany edytor GNU na naszym Ubuntu 20.04 System. Używamy go więc do otwarcia nowo wykonanego pliku C zgodnie z instrukcją pokazaną na obrazie.

$ nano mprotect1.C

Teraz dodałem niektóre wymagane biblioteki C do działania połączenia systemowego mprotect (). Zdefiniowaliśmy wbudowaną metodę błędu uchwytu używanego do wyświetlania wiadomości przekazanej w jego argumencie po pewnym problemie. Zdefiniowano tutaj metodę „przewodnika” i generuje sygnał sigsegv, gdy metoda obsługi próbuje uzyskać pamięć w sposób, który wtrąca się po ochronie. Pobiera również adres strony, w którym ten błąd został znaleziony.

Główna funkcja została tutaj zdefiniowana, aby rozpocząć wykonywanie kodu C. Wskaźnik typu postaci został zdefiniowany i zdefiniowano liczbę całkowitą „PSize”, aby ustawić rozmiar strony. Sigaction „S” struktury zdefiniowano tutaj, aby obsłużyć sygnał. Flaga sigaction została użyta do uzyskania metody obsługi sygnału za pomocą SA_SIGINFO. W wykonaniu system zablokował dodatkowy zestaw sygnałów za pomocą SA_Mask i sprawi, że kolejka jest pusta. SA_Sigaction przechowuje adres modułu obsługi sygnału dla sygnałów, które nie są ustawione w kolejce.

Jeśli sygnał funkcji Sigaction przechodzi jako „sigsegv”, wskaźnik i metoda zerowa, a funkcja zwraca -1, błąd uchwytu otrzyma „sigaction” jako błąd, a rozmiar strony został zapisany do PSIZE. Jeśli rozmiar jest mniejszy niż 0, zostanie wysłany błąd Syssconf. Pamięć 4 stron została przypisana do bufora. Jeśli bufor jest zerowy, zostanie wysłany błąd „memalign”. Instrukcja drukowania wyświetli początkowy adres bufora. Kolejna instrukcja IF została tutaj użyta do sprawdzenia ochrony pamięci i zwiększenia indeksu bufora.

Po kompilacji przez polecenie GCC i wykonanie mamy, że wyświetla on oryginalny region, a następnie wyświetla system SigSegv, ponieważ coś zniknie.

$ gcc mprotect1.C
$ ./A.na zewnątrz

Przykład 02:

Miejmy kolejny przykład, aby zademonstrować połączenie systemowe mprotect (). Najpierw utwórz nowy plik.

$ touch mprotect2.C

Otwórz plik.

$ nano mprotect2.C

Po uwzględnieniu nagłówka zainicjowano liczbę całkowitą i wskaźnik statyczny. Zastosowano tutaj metodę obsługi, aby pokazać, że pamięć została dostępna. Wzywa się tutaj połączenie systemowe MProtect do przekazywania pamięci, rozmiaru i niektórych innych argumentów jako parametrów.

Główna metoda zawiera deskryptor typu liczb całkowitych i typu struktury sigaction „S”. Następnie zainstalowaliśmy metodę Handler () jako obsługi SIGSEGV. Następnie przydzieliłem 1-stronicową pamięć do pokazanej ścieżki pliku i zapisałem ją do pliku deskryptora „F”. Po mapowaniu pamięci deskryptor został zamknięty. Użyjemy wskaźnika zmiennego „M”, aby uzyskać prywatną kopię, pisząc na stronie. Następnie dodaliśmy wywołanie systemu MProtect, aby zapobiec przypisaniu praw do pisania do pamięci. Następnie napisaliśmy 1 na stronie. To zapisze na przypisanej pamięci strony. Instrukcja drukowania została użyta do wyświetlania komunikatu ukończenia, a metoda MUNMAP () została tutaj użyta do niezmawiania przydzielonej pamięci.

Skompilujmy i wykonajmy ten zaktualizowany kod w terminalu za pomocą „GCC” i „./A.OUT ”Polecenia. System pokazuje, że pamięć została dostępna, przypisana i niezaprzeczona do jednej strony. „Wszystko ukończone!„Wiadomość została wyświetlona na ekranie.

$ ./A.na zewnątrz

Wniosek:

W tym artykule opracowaliśmy dwa przykłady, aby zrozumieć działanie połączenia systemowego mprotect () w celu ochrony przypisanej pamięci na stronie. Przykłady zawierają użycie funkcji obsługi; Metody Unmap Metody, struktury sigakcji i wskaźniki w celu osiągnięcia pożądanych wyników.