Interesuje mnie modyfikowanie wewnętrznych elementów jądra, stosowanie poprawek, obsługa sterowników urządzeń i modułów dla własnej osobistej zabawy.
Czy istnieje kompleksowe źródło hakowania jądra, przeznaczone dla doświadczonych programistów?
linux
kernel
linux-kernel
Adam Matan
źródło
źródło
Odpowiedzi:
Podróż tysiąca mil kodowych musi rozpocząć się od jednego kroku. Jeśli masz wątpliwości co do której z poniższych książek na początek, nie martw się, wybierz dowolną z nich. Nie wszyscy którzy błądzą są zagubieni. Ponieważ wszystkie drogi ostatecznie łączą się z autostradami , podczas podróży po jądrze będziesz odkrywać nowe rzeczy, gdy strony będą się rozwijać, nie spotykając żadnych ślepych zaułków, i ostatecznie połączą się z siecią
code-set
. Czytaj uważnie i pamiętaj: Kod to nie literatura .To, co zostało, nie jest rzeczą ani emocją, ani obrazem, ani obrazem mentalnym, ani wspomnieniem, ani nawet pomysłem. To jest funkcja. Jakiś proces. Aspekt życia, który można opisać jako funkcję czegoś „większego”. I dlatego wydaje się, że tak naprawdę nie jest „oddzielone” od tego czegoś innego. Podobnie jak funkcja noża - przecinanie czegoś - w rzeczywistości nie jest oddzielona od samego noża. Funkcja może być lub może nie być w tej chwili używana, ale potencjalnie NIGDY nie jest osobna.
Algorytm derandomizowany Solovaya Strassena dla testu pierwotności :
Czytaj, aby nie zaprzeczać i nie spierać się; ani nie wierzyć i brać za pewnik; ani nie znaleźć mowy ani dyskursu; ale ważyć i rozważać. Niektóre książki mają być degustowane, inne połykane, a niektóre do żucia i trawienia: to znaczy, niektóre książki należy czytać tylko w częściach, inne do przeczytania, ale nie ciekawie, a niektóre do przeczytania w całości oraz z należytą starannością i uwagą.
Czytelnik powinien dobrze znać koncepcje systemu operacyjnego ; rzetelne zrozumienie długotrwałych procesów i ich różnic z procesami o krótkich seriach wykonania; odporność na uszkodzenia przy jednoczesnym spełnieniu miękkich i twardych ograniczeń w czasie rzeczywistym. Podczas czytania ważne jest zrozumienie i
n/ack
wyborów projektowych dokonanych przez źródło jądra Linux w podstawowych podsystemach.Wątki [i] sygnały [są] zależną od platformy ścieżką nędzy, rozpaczy, horroru i szaleństwa (~ Anthony Baxte). Biorąc to pod uwagę, powinieneś być samoocennym ekspertem C, zanim zanurzysz się w jądrze. Powinieneś również mieć dobre doświadczenie z połączonymi listami, stosami, kolejkami, drzewami Czerwonej Czarnej, funkcjami skrótu i innymi.
Piękno i sztuka źródła jądra Linuksa polegają na celowym zaciemnianiu kodu stosowanym razem. Jest to często konieczne, aby przekazać znaczenie obliczeniowe obejmujące dwie lub więcej operacji w czysty i elegancki sposób. Jest to szczególnie prawdziwe podczas pisania kodu dla architektury wielordzeniowej.
Wykłady wideo na temat Real-Time Systems , Planowanie zadań , kompresja pamięci , bariera pamięci , SMP
Twoim zadaniem jest w zasadzie ustanowienie szybkiego interfejsu komunikacyjnego między urządzeniem sprzętowym a jądrem oprogramowania. Należy zapoznać się z arkuszem danych / instrukcją obsługi sprzętu, aby zrozumieć zachowanie urządzenia i jego kontroli oraz stanów danych i udostępnionych kanałów fizycznych. Znajomość asemblera dla konkretnej architektury i rzetelna znajomość opisu sprzętu VLSI Języki takie jak VHDL lub Verilog pomogą Ci na dłuższą metę.
P : Ale dlaczego muszę czytać specyfikacje sprzętu?
Odp . : Ponieważ „istnieje przepaść węgla i krzemu, których oprogramowanie nie może łączyć” - Rahul Sonnad
Powyższe nie stanowi jednak problemu dla algorytmów obliczeniowych ( kod sterownika - przetwarzanie w dolnej połowie ), ponieważ można je w pełni symulować na uniwersalnej maszynie Turinga . Jeśli obliczony wynik jest prawdziwy w dziedzinie matematycznej , jest pewne, że jest on również prawdziwy w dziedzinie fizycznej .
Wykłady wideo na temat sterowników urządzeń dla systemu Linux (Wy 17 i 18), Anatomia wbudowanego sterownika KMS , Kontrola pinów i Aktualizacja GPIO , Common Clock Framework , Napisz prawdziwy sterownik dla systemu Linux - Greg KH
Zrozumienie przejścia pakietów w jądrze jest kluczem do zrozumienia sieci jądra. Zrozumienie tego jest koniecznością, jeśli chcemy zrozumieć wewnętrzne funkcje Netfilter lub IPSec i więcej. Dwie najważniejsze struktury warstwy sieci jądra Linuksa to:
struct sk_buff
istruct net_device
Brian W. Kernighan w artykule Unix for Beginners (1979) powiedział: „Najskuteczniejszym narzędziem do debugowania jest staranne przemyślenie w połączeniu z rozsądnie umieszczonymi instrukcjami drukowania”. Wiedza o tym, co należy zebrać, pomoże ci szybko uzyskać odpowiednie dane do szybkiej diagnozy. Wielki informatyk Edsger Dijkstra powiedział kiedyś, że testy mogą wykazać obecność błędów, ale nie ich brak. Dobre praktyki dochodzeniowe powinny równoważyć potrzebę szybkiego rozwiązywania problemów, potrzebę rozwijania umiejętności oraz efektywne wykorzystanie ekspertów w danej dziedzinie.
Są chwile, kiedy osiągasz dno, wydaje się, że nic nie działa i brakuje Ci wszystkich opcji. Wtedy zaczyna się prawdziwe debugowanie. Błąd może zapewnić przerwę potrzebną do oderwania się od fiksacji na nieskutecznym rozwiązaniu.
Wykłady wideo na temat debugowania i profilowania jądra , analizy zrzutu rdzenia , debugowania wielordzeniowego z GDB , kontrolowania warunków wyścigu wielordzeniowego , debugowania elektroniki
W systemie UNIX wszystko jest plikiem; jeśli coś nie jest plikiem, jest to proces, z wyjątkiem nazwanych potoków i gniazd. W systemie plików plik jest reprezentowany przez
inode
rodzaj numeru seryjnego zawierającego informacje o rzeczywistych danych, z których składa się plik. Wirtualny system plików LinuxVFS
buforuje informacje w pamięci z każdego systemu plików, gdy jest on montowany i używany. Należy dołożyć starań, aby poprawnie zaktualizować system plików, ponieważ dane w tych pamięciach podręcznych są modyfikowane podczas tworzenia, zapisywania i usuwania plików i katalogów. Najważniejszym z tych buforów jest bufor buforów, zintegrowany ze sposobem, w jaki poszczególne systemy plików uzyskują dostęp do swoich podstawowych blokowych urządzeń magazynujących.Wykłady wideo na temat systemów pamięci masowej , systemu plików Flash
Kryptografia stanowi podstawę zaufania online. Hakowanie wykorzystuje mechanizmy kontroli bezpieczeństwa w elementach technicznych, fizycznych lub ludzkich. Ochrona jądra przed innymi uruchomionymi programami jest pierwszym krokiem w kierunku bezpiecznego i stabilnego systemu, ale oczywiście to nie wystarczy: musi istnieć pewien stopień ochrony między różnymi aplikacjami użytkowników. Exploity mogą atakować lokalne lub zdalne usługi.
Wykłady wideo na temat kryptografii i bezpieczeństwa sieci , przestrzeni nazw dla bezpieczeństwa , ochrony przed atakami zdalnymi , Secure Embedded Linux
Możesz nie myśleć, że programiści to artyści, ale programowanie to niezwykle kreatywny zawód. To kreatywność oparta na logice. Edukacja informatyczna nie może uczynić nikogo ekspertem programistycznym bardziej niż studiowanie pędzli, a pigment może uczynić kogoś ekspertem malarzem. Jak już wiesz, istnieje różnica między poznaniem ścieżki a przejściem nią; niezwykle ważne jest zakasanie rękawów i zabrudzenie rąk kodem źródłowym jądra. Wreszcie, dzięki tak zdobytej wiedzy na temat jądra , gdziekolwiek się wybierzesz, zabłyśniesz .
Niedojrzali koderzy naśladują; dojrzałe kodery kradną; złe kodery niszczą to, co biorą, a dobrzy koderzy robią z tego coś lepszego, a przynajmniej innego. Dobry programista zgrzewa swoją kradzież w całość, która jest wyjątkowa, zupełnie inna niż ta, w której została rozdarta.
Wykłady wideo na temat przepisów dotyczących jądra
Linux_source_dir/Documentation/*
źródło
Linux Kernel Newbies to świetny zasób.
źródło
Proponuję przeczytać „ Jądro Linux w pigułce ” Grega Kroah-Hartmana i „ Zrozumienie jądra Linux ” Roberta Love'a. Musi czytać :)
źródło
Linux Device Drivers to kolejny dobry zasób. To dałoby ci inny sposób na wejście w wewnętrzne funkcjonowanie. Ze wstępu:
źródło
Zobacz projekt dokumentacji systemu Linux . W szczególności „Przewodnik po module jądra Linux”.
źródło
Linux Kernel 2.4 Internals to kolejny zasób online do obejrzenia. Wygląda na to, że zajmuje dość przyziemne podejście, zaczynając od rozruchu. Oto spis treści:
Aby jeszcze bardziej urozmaicić, pojawiło się nowe wydanie trzeciej wersji Linux Kernel Development autorstwa Roberta Lovea, a Slashdot ma recenzję.
źródło
Zacznij od Linux Kernel Primer autorstwa Claudii Salzberg i in. Dobry na początek dla początkujących. Książka Roberta Love'a zdecydowanie nie jest książką, od której powinni zacząć początkujący. Ostatnia książka jest powyżej poziomu pośredniego.
źródło