Debugowanie jądra systemu Linux

Podobne dokumenty
Odpluskwianie jądra Linuksa. Michał Brzozowski Krzysztof Korolczuk Marek Stępniowski

Programowanie Systemów Wbudowanych

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Łukasz Kajda - funkcja printk - demony klogd i syslogd - polecenia strace i ltrace Arkadiusz Firus - kdb - kgdb Marcin Jałmużna - uml Krzysztof

Odpluskwianie jądra Linuksa

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

ZADANIE.02 Podstawy konfiguracji (interfejsy) Zarządzanie konfiguracjami 1,5h

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Etapy uruchamiania systemu

Tworzenie oprogramowania

Visual Basic Debugging and Error Handling

1.Wstęp. 2.Generowanie systemu w EDK

C++ - [1-3] Debugowanie w Qt Creator

Konfiguracja vsftpd ( Very Secure FTP Server )

GRUB (GRand Unified Bootloader) - jest bootloaderem instalowanym standardowo w Ubuntu, potrafiącym obsłużyć kilka systemów jednocześnie (Multiboot).

Współpraca z platformą dokumentacja techniczna

Programowanie Systemów Czasu Rzeczywistego


Instrukcja obsługi modułu Clickshop w Systemie FLASHCOM FIS.

Diagnostyka pamięci RAM

WYKONYWANIE ORAZ PRZYWRACANIE KOPII KONFIGURACJI ZA POMOCĄ INTERFEJSU 20-HIM-A6 / 20-HIM-C6S W PRZEMIENNIKACH SERII POWERFLEX 750

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

1. Tworzenie nowego projektu.

MentorGraphics ModelSim

VMware, QEMU, UML. oraz inne wirtualne maszyny. Piotr Findeisen Filip Grządkowski Piotr Kuśka Krzysztof Mroczek

SysLoger. Instrukcja obsługi. maj 2018 dla wersji aplikacji (wersja dokumentu 2.5)

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego

Struktury systemów operacyjnych

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Programowanie Niskopoziomowe

Wprowadzenie do obsługi systemu IOS na przykładzie Routera

Współpraca z platformą Emp@tia. dokumentacja techniczna

Archiwizacja baz MSSQL /BKP_SQL/ opis oprogramowania

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Adam Kotynia, Łukasz Kowalczyk

Instrukcja użytkownika ARSoft-WZ1

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Najczęściej występujące problemy z instalacją i konfiguracją i ich rozwiązania.

ODCZYT PRZEZ ZŁĄCZE OBD

1 Moduł Inteligentnego Głośnika

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7?

1 Moduł Inteligentnego Głośnika 3

Procedura rozbudowy macierzy o 2 x HDD 2TB i migracji systemu OPEN-E z USB na LUN Przygotowana na zlecenie COMARCH s.a. przez NTT System s.a.

Optymalizacja programów Open Source. Profilery wysokiego poziomu część 1. Krzysztof Lichota

Tworzenie połączenia szerokopasmowego /PPPoE/ dla sieci SOLARNET w systemie Linux

MikroTik Serwer OpenVPN

Tomasz Greszata - Koszalin

Procesy pojęcia podstawowe. 1.1 Jak kod źródłowy przekształca się w proces

Automatyzacja i robotyzacja procesów technologicznych

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykaz zmian w programie SysLoger

Ewidencja Wyposażenia PL+

SystimPlus. Dokumentacja (FAQ) dla wersji: v

Instrukcja instalacji i obsługi modemu ED77 pod systemem operacyjnym Windows 98 SE (wydanie drugie)

1. Opis. 2. Wymagania sprzętowe:

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Instrukcja instalacji aplikacji Comarch Smart Card ToolBox

Kompilacja jądra systemu Linux

Analiza malware Remote Administration Tool (RAT) DarkComet

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Computer Setup Instrukcja obsługi

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

Wprowadzenie do środowiska Qt Creator

Programowanie w Javie

Wykaz zmian w programie SysLoger

MODUŁ INTEGRUJĄCY ELEKTRONICZNEGO NADAWCĘ Z WF-MAG SPIS TREŚCI

Instrukcja użytkownika ARsoft-CFG WZ1 4.0

Konfiguracja pakietu CrossStudio for MSP

Materiały pomocnicze do laboratorium z Architektury Komputerów II.

epuap Archiwizacja w Osobistym Składzie Dokumentów

CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit.

Program RMUA. Instrukcja konfiguracji i pracy w programie. (Wersja 2)

Instalacja programu Warsztat 3 w sieci

K. Konopko; Toolchain. Jądro Linuksa. dr inż. Krzysztof Konopko

S P I S T R E Ś C I. Instrukcja obsługi

Informatyka I : Tworzenie projektu

Rysunek 178. Programowanie monitorów KDS

INSTRUKCJE WIKAMP Dotyczy wersji systemu z dnia

Linux: Procesy. Systemy Operacyjne. Mateusz Hołenko. 26 marca 2013

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Rysunek 178. Programowanie monitorów KDS

Przywracanie parametrów domyślnych. Przycisnąć przycisk STOP przez 5 sekund. Wyświetlanie naprzemienne Numer parametru Wartość parametru

jest dostępne na różne systemy operacyjne. Niniejsza instrukcja opisuje podstawowe operacje i opcje niezbędne do rozpoczęcia pracy w tym programie.

Za pomocą niniejszej instrukcji baza programu MAK zostanie przygotowania do eksportu na METALIB.

Klient poczty elektronicznej - Thunderbird

Instalacja oprogramowania KISSsoft 03/2017

Syslog. Dziennik systemowy

Acronis Universal Restore

Instalacja i konfiguracja modemu. Huawei E1550

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski

SPIS TREŚCI: KARTY GRAFICZNE... 15

VinCent Administrator

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Zadanie1. Wykorzystując serwis internetowy Wikipedii wyjaśnij następujące pojęcia: wirtualizacja, VirtualBox, Vmware, KVM, Virtual PC, Hyper-V.

Sieciowa instalacja Sekafi 3 SQL

Instalacja sieciowa Autodesk AutoCAD oraz wertykali

Podręcznik użytkownika

Transkrypt:

Norbert Potocki Krzysztof Gogól Piotr Dittwald 30 listopada 2007

Debugowanie jądra - wstęp Problemy z debugowaniem jądra musimy często resetować system czasami potrzebna jest kompilacja dużych fragmentów jądra niebezpieczeństwo uszkodzenia systemu plików błąd w jądrze może zawiesić cały system brak możliwości użycia debuggera nic nie może stać wyżej niż jądro

Debugowanie jądra - wstęp Sposoby debugowania jądra wypisywanie informacji debugujących podczas działania jądra printk, itp. użycie wbudowanego w jądro debuggera kdb wirtualizacja systemu i debugowanie jądra jako zwykłego procesu użytkownika uml

Printk() Oops printk() - cóż to takiego? funkcja wypisująca wiadomości jądra - działanie podobne do printf() wypisywane wiadomości są powiązane z różnymi poziomami logowania (ang. loglevels) lub priorytetami odpowiedni loglevel jest wskazywany przez makro Przykłady: p r i n t k (KERN DEBUG Here I am : %s :% i \n, FILE, LINE & ) ; p r i n t k (KERN CRIT I m t r a s h e d ; g i v i n g up on %p\n, p t r ) ;

Printk() Oops trochę o poziomach logowania (loglevels) istnieje 8 możliwych poziomów logowania, zdefinowanych w pliku nagłówkowym linux/kernel.h mniejszy numer = wyższy priorytet brak wyspecyfikowanego w printfk priorytetu brany jest DEFAULT MESSAGE LOGLEVEL (wyspecyfikowany w /kernel/printk.c) - wartość ta zmieniała się w historii rozwoju Linuksa, więc sugerowane jest jawne specyfikowanie priorytetu wiadomość o priorytecie większym niż console loglevel wyświetlana jest na konsoli (wiadomości jądra zależą także od działania klogd oraz syslogd ) w /proc/sys/kernel/printk znajdują się następujące cztery wartości: console loglevel, default message loglevel, minimum console level oraz default console loglevel

Printk() Oops trochę o poziomach logowania (loglevels) istnieje 8 możliwych poziomów logowania, zdefinowanych w pliku nagłówkowym linux/kernel.h mniejszy numer = wyższy priorytet brak wyspecyfikowanego w printfk priorytetu brany jest DEFAULT MESSAGE LOGLEVEL (wyspecyfikowany w /kernel/printk.c) - wartość ta zmieniała się w historii rozwoju Linuksa, więc sugerowane jest jawne specyfikowanie priorytetu wiadomość o priorytecie większym niż console loglevel wyświetlana jest na konsoli (wiadomości jądra zależą także od działania klogd oraz syslogd ) w /proc/sys/kernel/printk znajdują się następujące cztery wartości: console loglevel, default message loglevel, minimum console level oraz default console loglevel

Printk() Oops trochę o poziomach logowania (loglevels) istnieje 8 możliwych poziomów logowania, zdefinowanych w pliku nagłówkowym linux/kernel.h mniejszy numer = wyższy priorytet brak wyspecyfikowanego w printfk priorytetu brany jest DEFAULT MESSAGE LOGLEVEL (wyspecyfikowany w /kernel/printk.c) - wartość ta zmieniała się w historii rozwoju Linuksa, więc sugerowane jest jawne specyfikowanie priorytetu wiadomość o priorytecie większym niż console loglevel wyświetlana jest na konsoli (wiadomości jądra zależą także od działania klogd oraz syslogd ) w /proc/sys/kernel/printk znajdują się następujące cztery wartości: console loglevel, default message loglevel, minimum console level oraz default console loglevel

Printk() Oops trochę o poziomach logowania (loglevels) istnieje 8 możliwych poziomów logowania, zdefinowanych w pliku nagłówkowym linux/kernel.h mniejszy numer = wyższy priorytet brak wyspecyfikowanego w printfk priorytetu brany jest DEFAULT MESSAGE LOGLEVEL (wyspecyfikowany w /kernel/printk.c) - wartość ta zmieniała się w historii rozwoju Linuksa, więc sugerowane jest jawne specyfikowanie priorytetu wiadomość o priorytecie większym niż console loglevel wyświetlana jest na konsoli (wiadomości jądra zależą także od działania klogd oraz syslogd ) w /proc/sys/kernel/printk znajdują się następujące cztery wartości: console loglevel, default message loglevel, minimum console level oraz default console loglevel

Printk() Oops trochę o poziomach logowania (loglevels) istnieje 8 możliwych poziomów logowania, zdefinowanych w pliku nagłówkowym linux/kernel.h mniejszy numer = wyższy priorytet brak wyspecyfikowanego w printfk priorytetu brany jest DEFAULT MESSAGE LOGLEVEL (wyspecyfikowany w /kernel/printk.c) - wartość ta zmieniała się w historii rozwoju Linuksa, więc sugerowane jest jawne specyfikowanie priorytetu wiadomość o priorytecie większym niż console loglevel wyświetlana jest na konsoli (wiadomości jądra zależą także od działania klogd oraz syslogd ) w /proc/sys/kernel/printk znajdują się następujące cztery wartości: console loglevel, default message loglevel, minimum console level oraz default console loglevel

Przykłady Wprowadzenie Printk() Oops fragment pliku /include/linux/kernel.h (jądro 2.6.17.13): #d e f i n e KERN EMERG <0> / system i s unusable / #d e f i n e KERN ALERT <1> / action must be taken immediately / #d e f i n e KERN CRIT <2> / c r i t i c a l c o n d i t i o n s / #d e f i n e KERN ERR <3> / e r r o r c o n d i t i o n s / #d e f i n e KERN WARNING <4> / warning c o n d i t i o n s / #d e f i n e KERN NOTICE <5> / normal but s i g n i f i c a n t c o n d i t i o n / #d e f i n e KERN INFO <6> / i n f o r m a t i o n a l / #d e f i n e KERN DEBUG <7> / debug l e v e l messages /

Przykłady - c.d. Wprowadzenie Printk() Oops fragment pliku /kernel/printk.c (jądro 2.6.17.13): / p r i n t k s w i t h o u t a l o g l e v e l use t h i s.. / #d e f i n e DEFAULT MESSAGE LOGLEVEL 4 / KERN WARNING / / We show everything that i s MORE important than t h i s.. / #d e f i n e MINIMUM CONSOLE LOGLEVEL 1 / Minimum l o g l e v e l we l e t p e o p l e use / #d e f i n e DEFAULT CONSOLE LOGLEVEL 7 / anything MORE s e r i o u s than KERN DEBUG /

Printk() Oops Debugging System Faults fault!= panic oops zakłócenie w poprawnej pracy jądra Linuxa powodujące błąd Pomimo oopsa, system często działa dalej Ginie tylko proces odpowiedzialny za wywołanie błędu Tracona jest zapisywana przez proces pamięć

Printk() Oops Debugging System Faults fault!= panic oops zakłócenie w poprawnej pracy jądra Linuxa powodujące błąd Pomimo oopsa, system często działa dalej Ginie tylko proces odpowiedzialny za wywołanie błędu Tracona jest zapisywana przez proces pamięć

Printk() Oops Debugging System Faults fault!= panic oops zakłócenie w poprawnej pracy jądra Linuxa powodujące błąd Pomimo oopsa, system często działa dalej Ginie tylko proces odpowiedzialny za wywołanie błędu Tracona jest zapisywana przez proces pamięć

Printk() Oops Debugging System Faults fault!= panic oops zakłócenie w poprawnej pracy jądra Linuxa powodujące błąd Pomimo oopsa, system często działa dalej Ginie tylko proces odpowiedzialny za wywołanie błędu Tracona jest zapisywana przez proces pamięć

Printk() Oops Debugging System Faults fault!= panic oops zakłócenie w poprawnej pracy jądra Linuxa powodujące błąd Pomimo oopsa, system często działa dalej Ginie tylko proces odpowiedzialny za wywołanie błędu Tracona jest zapisywana przez proces pamięć

Printk() Oops Z oopsa można odczytać wiele ciekawych informacji

Printk() Oops Oops wg lxr.linux.no/source/documentation/oops-tracing.txt Co zrobić, gdy trafimy na oopsa? Znajdź Oopsa i wyślij go do osoby zajmującej się utrzymaniem systemu. Wyślij Oopsa do linux-kernel@vger.kernel.org Co zrobić jeśli błąd jest na tyle poważny, że nie można wpisywać poleceń? Przepisać ręcznie tekst z ekranu Zrobić zdjęcie aparatem cyfrowym

Printk() Oops Oops wg lxr.linux.no/source/documentation/oops-tracing.txt Co zrobić, gdy trafimy na oopsa? Znajdź Oopsa i wyślij go do osoby zajmującej się utrzymaniem systemu. Wyślij Oopsa do linux-kernel@vger.kernel.org Co zrobić jeśli błąd jest na tyle poważny, że nie można wpisywać poleceń? Przepisać ręcznie tekst z ekranu Zrobić zdjęcie aparatem cyfrowym

Printk() Oops Oops wg lxr.linux.no/source/documentation/oops-tracing.txt Co zrobić, gdy trafimy na oopsa? Znajdź Oopsa i wyślij go do osoby zajmującej się utrzymaniem systemu. Wyślij Oopsa do linux-kernel@vger.kernel.org Co zrobić jeśli błąd jest na tyle poważny, że nie można wpisywać poleceń? Przepisać ręcznie tekst z ekranu Zrobić zdjęcie aparatem cyfrowym

Printk() Oops Oops wg lxr.linux.no/source/documentation/oops-tracing.txt Co zrobić, gdy trafimy na oopsa? Znajdź Oopsa i wyślij go do osoby zajmującej się utrzymaniem systemu. Wyślij Oopsa do linux-kernel@vger.kernel.org Co zrobić jeśli błąd jest na tyle poważny, że nie można wpisywać poleceń? Przepisać ręcznie tekst z ekranu Zrobić zdjęcie aparatem cyfrowym

Printk() Oops Oops wg lxr.linux.no/source/documentation/oops-tracing.txt Co zrobić, gdy trafimy na oopsa? Znajdź Oopsa i wyślij go do osoby zajmującej się utrzymaniem systemu. Wyślij Oopsa do linux-kernel@vger.kernel.org Co zrobić jeśli błąd jest na tyle poważny, że nie można wpisywać poleceń? Przepisać ręcznie tekst z ekranu Zrobić zdjęcie aparatem cyfrowym

Printk() Oops Oops wg lxr.linux.no/source/documentation/oops-tracing.txt Co zrobić, gdy trafimy na oopsa? Znajdź Oopsa i wyślij go do osoby zajmującej się utrzymaniem systemu. Wyślij Oopsa do linux-kernel@vger.kernel.org Co zrobić jeśli błąd jest na tyle poważny, że nie można wpisywać poleceń? Przepisać ręcznie tekst z ekranu Zrobić zdjęcie aparatem cyfrowym

Printk() Oops Co pokazuje oops? 1 Numer oopsa 2 Status programu i stan rejestrów procesora 3 Zawartość stosu 4 Zapis ostatnich wywołań

Printk() Oops Co pokazuje oops? 1 Numer oopsa 2 Status programu i stan rejestrów procesora 3 Zawartość stosu 4 Zapis ostatnich wywołań

Printk() Oops Co pokazuje oops? 1 Numer oopsa 2 Status programu i stan rejestrów procesora 3 Zawartość stosu 4 Zapis ostatnich wywołań

Printk() Oops Co pokazuje oops? 1 Numer oopsa 2 Status programu i stan rejestrów procesora 3 Zawartość stosu 4 Zapis ostatnich wywołań

Wprowadzenie Printk() Oops Gdzie znajdują się te informacje?

Wprowadzenie Printk() Oops Gdzie znajdują się te informacje?

Źródło oopsa Wprowadzenie Printk() Oops Moduł z błędem (pointer nie może być 0) #i n c l u d e <l i n u x / module. h> MODULE LICENSE ( GPL ) ; i n t i n i t module ( v o i d ) { p r i n t k (KERN INFO P s u j a c e H e l l o w o r l d \n ) ; c h a r c = 0 ; c = 1 0 0 ; r e t u r n 0 ; } v o i d c l e a n u p module ( v o i d ) { p r i n t k (KERN INFO good bye\n ) ; }

KLOGD Wprowadzenie Printk() Oops Demon klog dekoduje oops y zanim zostaną zapisane w logu. Uwaga na zdekodowany symbol EIP (Extended Instruction Pointer) Unable to h a n d l e k e r n e l NULL p o i n t e r d e r e f e r e n c e a t v i r t u a l a d d r e s s \ 00000000 p r i n t i n g e i p : c 48370 c 3 pde = 00000000 Oops : 0002 CPU : 0 EIP : 0 0 1 0 : [ f a u l t y : f a u l t y w r i t e +3/576] EFLAGS : 00010286 eax : f f f f f f e a ebx : c 2 c 55 ae 0 ecx : c 48370 c 0 edx : c 2 c 55b00 e s i : 0804d038 edi : 0804d038 ebp : c 2337 f 8c esp : c2337 f 8c ds : 0018 es : 0018 s s : 0018 Process cat ( pid : 23413, stackpage=c 2337000) Stack : 00000001 c 01356 e6 c2c55 ae0 0804d038 00000001 c2c55b00 c 2336000 \ 00000001 0804 d038 b f f f f b d 4 00000000 00000000 b f f f f b d 4 c 010b860 00000001 \ 0804 d038 00000001 00000001 0804d038 b f f f f b d 4 00000004 0000002b 0000002b \ 00000004 C a l l Trace : [ s y s w r i t e +214/256] [ system c a l l +52/56] Code : c7 05 00 00 00 00 00 00 00 00 31 c0 89 ec 5d c3 8d b6 00 00

Printk() Oops KLOGD Wskaźnik instrukcji był wykonywany w funkcji faulty-write KLOG ładuje informacje podczas uruchamiania, stąd jeśli moduł został załadowany po zainicjowaniu klogd. Klogd nie ma o nim informacji Aby temu przeciwdziałać można: 1 wysyłać sygnał SIGUSR1 po każdym załadowaniu nowego modułu 2 uruchomić klogd z opcją -p ( paranoid ), dzięki której klogd będzie ponownie wczytywać informacje o symbolach po każdym komunikacie oops Klogd potrzebuje aktualnej kopii System.map

Printk() Oops KLOGD Wskaźnik instrukcji był wykonywany w funkcji faulty-write KLOG ładuje informacje podczas uruchamiania, stąd jeśli moduł został załadowany po zainicjowaniu klogd. Klogd nie ma o nim informacji Aby temu przeciwdziałać można: 1 wysyłać sygnał SIGUSR1 po każdym załadowaniu nowego modułu 2 uruchomić klogd z opcją -p ( paranoid ), dzięki której klogd będzie ponownie wczytywać informacje o symbolach po każdym komunikacie oops Klogd potrzebuje aktualnej kopii System.map

Printk() Oops KLOGD Wskaźnik instrukcji był wykonywany w funkcji faulty-write KLOG ładuje informacje podczas uruchamiania, stąd jeśli moduł został załadowany po zainicjowaniu klogd. Klogd nie ma o nim informacji Aby temu przeciwdziałać można: 1 wysyłać sygnał SIGUSR1 po każdym załadowaniu nowego modułu 2 uruchomić klogd z opcją -p ( paranoid ), dzięki której klogd będzie ponownie wczytywać informacje o symbolach po każdym komunikacie oops Klogd potrzebuje aktualnej kopii System.map

Printk() Oops KLOGD Wskaźnik instrukcji był wykonywany w funkcji faulty-write KLOG ładuje informacje podczas uruchamiania, stąd jeśli moduł został załadowany po zainicjowaniu klogd. Klogd nie ma o nim informacji Aby temu przeciwdziałać można: 1 wysyłać sygnał SIGUSR1 po każdym załadowaniu nowego modułu 2 uruchomić klogd z opcją -p ( paranoid ), dzięki której klogd będzie ponownie wczytywać informacje o symbolach po każdym komunikacie oops Klogd potrzebuje aktualnej kopii System.map

Printk() Oops KLOGD Wskaźnik instrukcji był wykonywany w funkcji faulty-write KLOG ładuje informacje podczas uruchamiania, stąd jeśli moduł został załadowany po zainicjowaniu klogd. Klogd nie ma o nim informacji Aby temu przeciwdziałać można: 1 wysyłać sygnał SIGUSR1 po każdym załadowaniu nowego modułu 2 uruchomić klogd z opcją -p ( paranoid ), dzięki której klogd będzie ponownie wczytywać informacje o symbolach po każdym komunikacie oops Klogd potrzebuje aktualnej kopii System.map

Printk() Oops KLOGD Wskaźnik instrukcji był wykonywany w funkcji faulty-write KLOG ładuje informacje podczas uruchamiania, stąd jeśli moduł został załadowany po zainicjowaniu klogd. Klogd nie ma o nim informacji Aby temu przeciwdziałać można: 1 wysyłać sygnał SIGUSR1 po każdym załadowaniu nowego modułu 2 uruchomić klogd z opcją -p ( paranoid ), dzięki której klogd będzie ponownie wczytywać informacje o symbolach po każdym komunikacie oops Klogd potrzebuje aktualnej kopii System.map

Printk() Oops KSYMOOPS Czasem potrzeba więcej informacji niż dostarcza klogd. Często się zdarza, że klogd ginie w wyniku błędu systemu. Do serii 2.3, ksymoops był rozprowadzany ze źródłami jądra. Teraz można go ściągnąć np z ftp://ftp.ocs.com.au/pub/ksymoops

Printk() Oops KSYMOOPS Czasem potrzeba więcej informacji niż dostarcza klogd. Często się zdarza, że klogd ginie w wyniku błędu systemu. Do serii 2.3, ksymoops był rozprowadzany ze źródłami jądra. Teraz można go ściągnąć np z ftp://ftp.ocs.com.au/pub/ksymoops

Printk() Oops KSYMOOPS Czasem potrzeba więcej informacji niż dostarcza klogd. Często się zdarza, że klogd ginie w wyniku błędu systemu. Do serii 2.3, ksymoops był rozprowadzany ze źródłami jądra. Teraz można go ściągnąć np z ftp://ftp.ocs.com.au/pub/ksymoops

Printk() Oops KSYMOOPS Czasem potrzeba więcej informacji niż dostarcza klogd. Często się zdarza, że klogd ginie w wyniku błędu systemu. Do serii 2.3, ksymoops był rozprowadzany ze źródłami jądra. Teraz można go ściągnąć np z ftp://ftp.ocs.com.au/pub/ksymoops

Printk() Oops KSYMOOPS Ksymoops poza komunikatem o błędzie potrzebuje kilku dodatkowych informacji: 1 Plik System.map /usr/src/linux/system.map 2 Lista modułów /proc/ksyms 3 Symbole jądra zdefiniowane, gdy pojawia się oops /proc/ksyms 4 Kopia obrazu jądra (vmlinuz, zimage bzimage) 5 Lokalizacja modułów - można podawać za pomocą opsji -o

Printk() Oops KSYMOOPS Ksymoops poza komunikatem o błędzie potrzebuje kilku dodatkowych informacji: 1 Plik System.map /usr/src/linux/system.map 2 Lista modułów /proc/ksyms 3 Symbole jądra zdefiniowane, gdy pojawia się oops /proc/ksyms 4 Kopia obrazu jądra (vmlinuz, zimage bzimage) 5 Lokalizacja modułów - można podawać za pomocą opsji -o

Printk() Oops KSYMOOPS Ksymoops poza komunikatem o błędzie potrzebuje kilku dodatkowych informacji: 1 Plik System.map /usr/src/linux/system.map 2 Lista modułów /proc/ksyms 3 Symbole jądra zdefiniowane, gdy pojawia się oops /proc/ksyms 4 Kopia obrazu jądra (vmlinuz, zimage bzimage) 5 Lokalizacja modułów - można podawać za pomocą opsji -o

Printk() Oops KSYMOOPS Ksymoops poza komunikatem o błędzie potrzebuje kilku dodatkowych informacji: 1 Plik System.map /usr/src/linux/system.map 2 Lista modułów /proc/ksyms 3 Symbole jądra zdefiniowane, gdy pojawia się oops /proc/ksyms 4 Kopia obrazu jądra (vmlinuz, zimage bzimage) 5 Lokalizacja modułów - można podawać za pomocą opsji -o

Printk() Oops KSYMOOPS Ksymoops poza komunikatem o błędzie potrzebuje kilku dodatkowych informacji: 1 Plik System.map /usr/src/linux/system.map 2 Lista modułów /proc/ksyms 3 Symbole jądra zdefiniowane, gdy pojawia się oops /proc/ksyms 4 Kopia obrazu jądra (vmlinuz, zimage bzimage) 5 Lokalizacja modułów - można podawać za pomocą opsji -o

Printk() Oops KSYMOOPS Ksymoops poza komunikatem o błędzie potrzebuje kilku dodatkowych informacji: 1 Plik System.map /usr/src/linux/system.map 2 Lista modułów /proc/ksyms 3 Symbole jądra zdefiniowane, gdy pojawia się oops /proc/ksyms 4 Kopia obrazu jądra (vmlinuz, zimage bzimage) 5 Lokalizacja modułów - można podawać za pomocą opsji -o

KSYMOOPS Wprowadzenie Printk() Oops Wynik działania wygląda następująco: >>EIP ; c 48370 c 3 <[ f a u l t y ] f a u l t y w r i t e +3/20> <===== Trace ; c 01356 e6 <sys write+d6/100> Trace ; c010b860 <system c a l l +34/38> Code ; c 48370 c 3 <[ f a u l t y ] f a u l t y w r i t e +3/20> 00000000 < EIP >: Code ; c 48370 c 3 <[ f a u l t y ] f a u l t y w r i t e +3/20> <===== 0 : c7 05 00 00 00 movl $0x 0,0 x0 <===== Code ; c 48370 c 8 <[ f a u l t y ] f a u l t y w r i t e +8/20> 5 : 00 00 00 00 00 Code ; c 48370 cd <[ f a u l t y ] f a u l t y w r i t e+d/20> a : 31 c 0 x o r l %eax,% eax Code ; c 48370 c f <[ f a u l t y ] f a u l t y w r i t e+f /20> c : 89 ec movl %ebp,% esp Code ; c 48370 d1 <[ f a u l t y ] f a u l t y w r i t e +11/20> e : 5d p o p l %ebp Code ; c 48370 d2 <[ f a u l t y ] f a u l t y w r i t e +12/20> f : c 3 r e t Code ; c 48370 d3 <[ f a u l t y ] f a u l t y w r i t e +13/20> 1 0 : 8d b6 00 00 00 l e a l 0 x 0(%e s i ),% e s i Code ; c 48370 d8 <[ f a u l t y ] f a u l t y w r i t e +18/20> 1 5 : 00

Printk() Oops SYSTEM HANGS Chociaż większość błędów w kodzie jądra kończy się komunikatami oops, czasami system się całkowicie zawiesza. Dzieje się tak na przykład, gdy system zacznie wykonywać niekończącą się pętlę. Wtedy może nie pomóc nawet magiczne CTRL-ALT-DEL. Są dwa sposoby radzenie sobie z zawieszaniem systemu: 1 uprzednio im zapobiegać 2 debuggować po fakcie

Printk() Oops SYSTEM HANGS Chociaż większość błędów w kodzie jądra kończy się komunikatami oops, czasami system się całkowicie zawiesza. Dzieje się tak na przykład, gdy system zacznie wykonywać niekończącą się pętlę. Wtedy może nie pomóc nawet magiczne CTRL-ALT-DEL. Są dwa sposoby radzenie sobie z zawieszaniem systemu: 1 uprzednio im zapobiegać 2 debuggować po fakcie

Printk() Oops SYSTEM HANGS Chociaż większość błędów w kodzie jądra kończy się komunikatami oops, czasami system się całkowicie zawiesza. Dzieje się tak na przykład, gdy system zacznie wykonywać niekończącą się pętlę. Wtedy może nie pomóc nawet magiczne CTRL-ALT-DEL. Są dwa sposoby radzenie sobie z zawieszaniem systemu: 1 uprzednio im zapobiegać 2 debuggować po fakcie

Printk() Oops SYSTEM HANGS Chociaż większość błędów w kodzie jądra kończy się komunikatami oops, czasami system się całkowicie zawiesza. Dzieje się tak na przykład, gdy system zacznie wykonywać niekończącą się pętlę. Wtedy może nie pomóc nawet magiczne CTRL-ALT-DEL. Są dwa sposoby radzenie sobie z zawieszaniem systemu: 1 uprzednio im zapobiegać 2 debuggować po fakcie

Uwagi ogólne Instalacja Korzystanie z KDB czym jest KDB? debugger dla Linuxa opartego na jądrze 2.{234} projekt Silicon Graphics

Krótko o łatach Wprowadzenie Uwagi ogólne Instalacja Korzystanie z KDB łata (patch) - plik tekstowy przechowujący różnice między dwiema wersjami kodu źródłowego Nakładanie łaty: 1 wybieramy argument parametru -p (liczba 0) - ile ukośnikow usunąć ze ścieżki dostępnej w łacie 2 porównane zostają katalogi plików - oryginalnego i zmodyfikowanego

Krótko o łatach - c.d. Wprowadzenie Uwagi ogólne Instalacja Korzystanie z KDB Przykladowy poczatkowy fragment pliku laty i f f g i t a/credits b/credits a/credits +++ b/credits @@ 1624,10 +1624,10 @@ E : a j o s h i @ s h e l l. u n i x b o x. com D: f b d e v h a c k i n g N: J e s p e r J u h l E : juhl lkml@ dif. dk D: V a r i o u s s m a l l j a n i t o r f i x e s, c l e a n u p s e t c. +E : j e s p e r. j u h l @ g m a i l. com +D: V a r i o u s f i x e s, c l e a n u p s and minor f e a t u r e s.

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Cechy i możliwości przede wszystkim: nie wymaga dodatkowej maszyny do debugowania jądra wbudowany w jądro - łata (ang. patch) na jądro zakładanie pułapek (ang. breakpoints) kontrola zawartości pamięci jądra i struktur danych podczas pracy procesu formatowanie oraz wyświetlanie zebranych informacji kontrola operacji jądra (w tym zatrzymanie przy konkretnej instrukcji, wykonywanie krok po kroku ) sprawdzanie stanu procesu bez zewnętrznego systemu ani portu kontrola wielu procesorów

Uwagi ogólne Instalacja Korzystanie z KDB Dygresja (praktyczna), czyli instalacja łaty na przykładzie KDB pobieramy plik (http://oss.sgi.com/projects/kdb/) rozpakowujemy plik do katalogu ze źródłami Linuksa nakładamy patch konfigurujemy i kompilujemy jądro (za chwilę więcej o opcjach konfiguracji) Oto najważniejsze kroki: $ cd l i n u x $ patch p1 < kdb xxx %nakladamy patch $ make menuconfig %i n t e r a k t y w n a k o n f i g u r a c j a j a d r a

Uwagi ogólne Instalacja Korzystanie z KDB A teraz wersja (głównie) obrazkowa

Uwagi ogólne Instalacja Korzystanie z KDB Instalujemy patch ogólny - common

Uwagi ogólne Instalacja Korzystanie z KDB Instalujemy patch dla odpowiedniej architektury - tu: i386

Uwagi ogólne Instalacja Korzystanie z KDB Wybrane opcje konfiguracji jądra CONFIG KDB Compile the kernel with frame pointers ustawia flagę CONFIG FRAME POINTER - sugerowana (choć używa dodatkowego rejestru oraz ma negatywny wpływ na szybkość generowania kodu jądra) KDB off by default ustawia flagę CONFIG KDB OFF, która domyślnie wyłącza KDB

Po wpisaniu make menuconfig... Uwagi ogólne Instalacja Korzystanie z KDB

Uwagi ogólne Instalacja Korzystanie z KDB... wybieramy odpowiednie opcje dla debugowania (nie zapominamy o opcjach dla systemów plików itp.)

Zatwierdzamy opcje konfiguracji... Uwagi ogólne Instalacja Korzystanie z KDB

... i kompilujemy jądro Wprowadzenie Uwagi ogólne Instalacja Korzystanie z KDB

(co może trochę potrwać) Uwagi ogólne Instalacja Korzystanie z KDB

Uwagi ogólne Instalacja Korzystanie z KDB Na końcu używamy jeszcze make bzimage

Uwagi ogólne Instalacja Korzystanie z KDB Pozostało jeszcze kilka kroków dodanie obrazu jądra do odpowiedniego miejsca, np. /boot (plik z obrazem: bzimage; powinien - dla architektury i386 - być w katalogu {katalog ze źródłami}/arch/i386/boot/) ewentualna zmiana ustawień pliku bootloadera (lilo, grub)

Uwagi ogólne Instalacja Korzystanie z KDB Uruchamianie Jeśli flaga CONFIG KDB OFF nie jest aktywna, wówczas KDB jest domyślnie aktywne. Aby je deaktywować, należy przekazać flagę kdb=on do jądra podczas bootowania lub użyć polecenia (gdy system został załadowany): #echo 1 >/p r o c / s y s / k e r n e l / kdb Przywołania KDB mozna dokonać za pomocą: 1 klawisza PAUSE 2 kombinacji Ctrt-A 3 gdy KDB jest włączone, wówczas zostaje przywołane automatycznie w przypadku kernel panic

Uwagi ogólne Instalacja Korzystanie z KDB Wyświetlanie zawartości pamięci oraz jej modyfikacja wyświetlenie 15 linii pamięci począwszy od 0xc000000: [ 0 ] kdb> md 0 xc 000000 15 zmiana zawartości pamięci 0xc000000 na 0x10: [ 0 ] kdb> mm 0xc 000000 0x10

Uwagi ogólne Instalacja Korzystanie z KDB Wyświetlanie zawartości rejestrów oraz ich modyfikacja wyświetlenie zbioru rejestrów: [ 0 ] kdb> rd ustawienie zawartości rejestru ebx na 0x25: [ 0 ] kdb> rm %ebx 0 x 25

Ustawianie pułapek Wprowadzenie Uwagi ogólne Instalacja Korzystanie z KDB [ 1 ] kdb> bp s c u l l r e a d I n s t r u c t i o n ( i ) BP #0 a t 0 xc 8833514 ( s c u l l r e a d ) i s enabled on cpu 1 [ 1 ] kdb> go

Uwagi ogólne Instalacja Korzystanie z KDB Więcej - przykładowe źródła /Documentation/kdb książka Linux Device Drivers - część o debuggowaniu http://www.xml.com/ldd/chapter/book/ch04.html przewodnik dla początkujących użytkowników http://linuxdevices.com/articles/at3761062961.html

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD Czym jest KGDB? patch do konkretnej wersji jądra wymagane są dwie maszyny: 1 target machine tu uruchamiamy jądro, które chcemy debuggować 2 development machine maszyna, z której debuggujemy przy użyciu gdb maszyny są połączone przez porty szeregowe debuggowanie odbywa się w gdb

Wstęp KGBD zalety: 1 śledzenie wykonania kodu jądra instrukcja po instrukcji (w C lub w assemblerze) 2 Breakpointy, Obserwowanie wartości zmiennych i rejestrów 3 Obsługa wątków 4 Debuggowanie modułów wady: 1 dwie maszyny i port szeregowy 2 kgdb działa tylko dla starszych wersji jądra

Wstęp KGBD Instalacja i uruchamianie: 1 instalacja patchy dla odpowiedniej wersji jądra 2 połączenie dwóch maszyn 3 support files dla gdb Szczegółowe informacje znajdują się w patchu w pliku: Documentation/i386/gdb-serial.txt

Wstęp KGBD Instalacja i uruchamianie: 1 instalacja patchy dla odpowiedniej wersji jądra 2 połączenie dwóch maszyn 3 support files dla gdb Szczegółowe informacje znajdują się w patchu w pliku: Documentation/i386/gdb-serial.txt

Wstęp KGBD Instalacja i uruchamianie: 1 instalacja patchy dla odpowiedniej wersji jądra 2 połączenie dwóch maszyn 3 support files dla gdb Szczegółowe informacje znajdują się w patchu w pliku: Documentation/i386/gdb-serial.txt

Wstęp KGBD Instalacja i uruchamianie: 1 instalacja patchy dla odpowiedniej wersji jądra 2 połączenie dwóch maszyn 3 support files dla gdb Szczegółowe informacje znajdują się w patchu w pliku: Documentation/i386/gdb-serial.txt

Wstęp KGBD Instalacja i uruchamianie: 1 instalacja patchy dla odpowiedniej wersji jądra 2 połączenie dwóch maszyn 3 support files dla gdb Szczegółowe informacje znajdują się w patchu w pliku: Documentation/i386/gdb-serial.txt

KGBD Wprowadzenie Wstęp

Wstęp KGBD źródła jądra (www.kernel.org/pub/linux/kernel) - szczegolnie v2.6 dokumentacja do KGDB (kgdb.linsyssoft.com/downloads/kgdb 2/kgdb docu full 2.4.pdf.bz2) - do wersji 2.4 patche z KGDB (kgdb.linsyssoft.com/downloads.htm) - szczegolnie v2.4 starsze wersje KGDB (www.popies.net/kgdb/index.html) - dla jąder 2.4 instalacja (www.kernelhacking.org/docs/kernelhacking HOWTO/indexs09.html) - mało szczegółowa

Wstęp KGBD źródła jądra (www.kernel.org/pub/linux/kernel) - szczegolnie v2.6 dokumentacja do KGDB (kgdb.linsyssoft.com/downloads/kgdb 2/kgdb docu full 2.4.pdf.bz2) - do wersji 2.4 patche z KGDB (kgdb.linsyssoft.com/downloads.htm) - szczegolnie v2.4 starsze wersje KGDB (www.popies.net/kgdb/index.html) - dla jąder 2.4 instalacja (www.kernelhacking.org/docs/kernelhacking HOWTO/indexs09.html) - mało szczegółowa

Wstęp KGBD źródła jądra (www.kernel.org/pub/linux/kernel) - szczegolnie v2.6 dokumentacja do KGDB (kgdb.linsyssoft.com/downloads/kgdb 2/kgdb docu full 2.4.pdf.bz2) - do wersji 2.4 patche z KGDB (kgdb.linsyssoft.com/downloads.htm) - szczegolnie v2.4 starsze wersje KGDB (www.popies.net/kgdb/index.html) - dla jąder 2.4 instalacja (www.kernelhacking.org/docs/kernelhacking HOWTO/indexs09.html) - mało szczegółowa

Wstęp KGBD źródła jądra (www.kernel.org/pub/linux/kernel) - szczegolnie v2.6 dokumentacja do KGDB (kgdb.linsyssoft.com/downloads/kgdb 2/kgdb docu full 2.4.pdf.bz2) - do wersji 2.4 patche z KGDB (kgdb.linsyssoft.com/downloads.htm) - szczegolnie v2.4 starsze wersje KGDB (www.popies.net/kgdb/index.html) - dla jąder 2.4 instalacja (www.kernelhacking.org/docs/kernelhacking HOWTO/indexs09.html) - mało szczegółowa

Wstęp KGBD źródła jądra (www.kernel.org/pub/linux/kernel) - szczegolnie v2.6 dokumentacja do KGDB (kgdb.linsyssoft.com/downloads/kgdb 2/kgdb docu full 2.4.pdf.bz2) - do wersji 2.4 patche z KGDB (kgdb.linsyssoft.com/downloads.htm) - szczegolnie v2.4 starsze wersje KGDB (www.popies.net/kgdb/index.html) - dla jąder 2.4 instalacja (www.kernelhacking.org/docs/kernelhacking HOWTO/indexs09.html) - mało szczegółowa

Wstęp KGBD instalacja (oslab.info/index.php/misc/kgdb) - pod VMware gdb (safari.phptr.com/0131492470/ch03#ch03) - poradnik gdbmod (kgdb.linsyssoft.com/downloads/gdbmod 2.4.bz2) - Zmodyfikowane gdb dające możliwość debugowania modułów sdebug (www.linuxjournal.com/article/4525) modułów za pomocą KGDB

Wstęp KGBD instalacja (oslab.info/index.php/misc/kgdb) - pod VMware gdb (safari.phptr.com/0131492470/ch03#ch03) - poradnik gdbmod (kgdb.linsyssoft.com/downloads/gdbmod 2.4.bz2) - Zmodyfikowane gdb dające możliwość debugowania modułów sdebug (www.linuxjournal.com/article/4525) modułów za pomocą KGDB

Wstęp KGBD instalacja (oslab.info/index.php/misc/kgdb) - pod VMware gdb (safari.phptr.com/0131492470/ch03#ch03) - poradnik gdbmod (kgdb.linsyssoft.com/downloads/gdbmod 2.4.bz2) - Zmodyfikowane gdb dające możliwość debugowania modułów sdebug (www.linuxjournal.com/article/4525) modułów za pomocą KGDB

Wstęp KGBD instalacja (oslab.info/index.php/misc/kgdb) - pod VMware gdb (safari.phptr.com/0131492470/ch03#ch03) - poradnik gdbmod (kgdb.linsyssoft.com/downloads/gdbmod 2.4.bz2) - Zmodyfikowane gdb dające możliwość debugowania modułów sdebug (www.linuxjournal.com/article/4525) modułów za pomocą KGDB

UML w teorii UML = user mode linux.... czyli system uruchomiony w przestrzeni programów użytkownika jedna z metod wirtualizacji możliwość zagnieżdżania systemów dwa tryby działania: TT - Tracing Thread SKAS - Single Kernel Address Space jądra gospodarza i gościa może korzystać z systemu plików hosta, lub zawartego w pliku

UML - skąd go wziąć w wersjach jądra 2.6.9 jako łatka w wersjach jądra >= 2.6.9 jest włączony do drzewa jądra większość starszych jąder wymaga dodatkowych łatek.... np. 2.6.17.13 o czym nikt wcześniej nie pisał.... a na laby może się przydać ;)

UML w praktyce Wprowadzenie metoda prostsza: postępujemy zgodnie z instrukcjami ze strony http://user-mode-linux.sourceforge.net/ i pobieramy gotowe jądro oraz system plików metoda trudniejsza: kompilujemy własne jądro budujemy własny system plików więcej na stronie UML a

Debugowanie jądra 2.6.17.13 Pobieramy jądro $ wget f t p : / / f t p. k e r n e l. org /pub/ l i n u x / k e r n e l / v 2. 6 / l i n u x 2. 6. 1 7. 1 3. t a r. bz 2 $ wget h t t p : / / u s e r mode l i n u x. s o u r c e f o r g e. n e t / o l d / work / c u r r e n t / 2. 6 / 2. 6. 1 7 / p a t c h e s / jmpbuf Rozpakowujemy $ t a r x j f l i n u x 2. 6. 1 7. 1 3. t a r. bz 2 $ cd linux 2.6.17.13 $ patch p1 <.. / jmpbuf Konfigurujemy i kompilujemy $ make mrproper $ make menuconfig ARCH=um $ make l i n u x ARCH=um

Budowanie jądra 2.6.17.13.. i odpalamy $ l i n u x ubd0=r o o t f s mem=256m.. a gdy chcemy debugować w trybie SKAS $ gdb l i n u x ( gdb ) handle SIGSEGV pass nostop noprint ( gdb ) handle SIGUSR1 pass nostop noprint ( gdb ) run ubd0=root f s mem=256m

Debugowanie jądra 2.6.17.13 - problem interaktywności Odnajdujemy najniższy pid procesu uruchomionego przez nas jądra Przywracamy do życia gdb $ k i l l INT <nasz pid>

Debugowanie jądra 2.6.17.13 - moduły rozpoczynamy debugowanie jądra Dodajemy debugowanie modułu ( gdb ) b r e a k l i n k module ( gdb ) continue ( gdb ) p r i n t ( ( s t r u c t module ) mod) >module c o r e ( gdb ) add symbol f i l e SCIEZKA DO MODULU NA HOSCIE <wynik print> ( gdb ) break funkcja z modulu ( gdb ) continue

Bonus - prezentacja UML na jądrze 2.6.17.13 - na potrzeby labów