Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

Aby określić jądro, musisz podłączyć do komputera za pomocą kabla zerowego modemu lub połączenia modemu. Komputer debugowania zostanie nazwany "Host", a nazwisko "Cel" otrzyma problem.

Oba komputery powinny działać prowadzić tę samą wersję systemu Windows, a pliki znaków dla komputera docelowego muszą być zainstalowane na komputerze hosta. Pliki symboliczne znajdują się na płycie CD z systemem instalacyjnym Windows w katalogu podporowym.

Aby włączyć debugowanie, musisz wprowadzić zmiany w pliku Boot.ini na komputerze docelowym.

1. Zmień atrybuty pliku Boot.ini:

atrybek C: Boot.ini - R - S

2. Edytuj ten plik i w ciągu uruchomienie systemu Windows. Dodaj parametr / debuguj parametr (w celu zgłoszenia systemu o potrzebie pobrania baran Rdzeń Debuger. pobierz Windows.). Dodatkowe parametry. Są to / Debugport, które zgłaszają system, który port COM musi być używany (domyślny COM2) i / Baudrate - aby określić szybkość przesyłania danych (domyślnie, szybkość 19200 Baud, ale lepiej jest stosować 9600). Na przykład:


Multi (0) Dysk (0) Rdisk (0) Partition (0) Windows \u003d "Windows NT" / Debug / Debugnport \u003d COM2 / Baudrate \u003d 9600

3. Zapisz plik.

4. Zainstaluj poprzednie atrybuty pliku Boot.ini:

atrybowanie C: Boot.ini + R + S

W ten przykład Komputer docelowy pozwolił na połączenie przez port COM2 z prędkością 9600 bitów / s.

Komputer hosta musi być skonfigurowany za pomocą parametrów wymaganych do debugowania. Ponadto należy zainstalować pliki symboliczne. Aby je zainstalować, przejdź do katalogu DEBUG na płycie CD instalacyjnej i wprowadź następujące polecenie:

expndsym. : <целевой диск и каталог>

Na przykład:

eXPNDSY F: D: Symbole

Instalacja może zająć trochę czasu. Pamiętaj, że jeśli pakiety aktualizacji zostały zainstalowane na komputerze docelowym, pliki znaków te należy również zainstalować na komputerze hosta. Symboliczne pliki do pakietów aktualizacji można pobrać z witryny Microsoft.

Kolejnym etapem jest skonfigurowanie zmiennych środowiskowych wymaganych do debugowania, na przykład zmiennych wskazujących na lokalizację plików symbolicznych itp. Poniżej znajduje się opis tych zmiennych.

Opis zmiennych systemowych

Definicja tych zmiennych można umieścić plik dowodzenia. Aby uniknąć wprowadzania odpowiednich poleceń, gdy każde pobieranie:

echo off.
Ustaw _NT_DEBUG_PORT \u003d COM2
Ustaw _NT_DEBUG_BAUD_RATE \u003d 9600
Ustaw _NT_Symbol_path \u003d D: symbole I386
Ustaw _NT_LOG_FILE_OPEN \u003d D: DEBUG DEBUG DEBUG.LOG

Teraz musisz skopiować oprogramowanie debugowania Core, który znajduje się w katalogu Dibug<процессор> Na płycie CD (obsługa debugowania I386). Najprostszym sposobem kopiowania całego katalogu jest całkowicie, ponieważ ma mały rozmiar (około 2,5 MB). Dla platformy I386, debugger jest używany, który jest dostarczany jako plik i386kd.exe. Debugger zaczyna korzystać z polecenia I386KD. Aby wprowadzić polecenie, kliknij kombinację klawiszy I poczekaj, aż pojawi się zaproszenie wiersz poleceń kd\u003e.

Debugency trybu jądra znajdują się między procesorem a systemem operacyjnym. Oznacza to, że po zatrzymaniu debugera trybu jądra, system operacyjny jest również całkowicie zatrzymany. Łatwo jest dowiedzieć się, że przejście system operacyjny Ostry przystanek jest przydatny podczas pracy z problemami ze stopu i synchronizacji. Nadal, z wyjątkiem jednego debugera, który zostanie opisany poniżej (w sekcji "Debuger SoftLCE" w tym rozdziale), nie można debugować kodu trybu użytkownika za pomocą debugenta trybu jądra.

Debugery trybu jądra nie są tak bardzo. Oto niektóre z nich: Debugger Windows 80386 (WDB386), debuger jądra (1386kd), Windbg i Softlce. Każdy z tych debugnerów jest krótko opisany w następujących sekcjach.

Debuger wDeb386.

WDB386 to Windows 98 Kernel Debugger dystrybuowany jako część SDK platformy. Ten debuger jest przydatny tylko dla deweloperów, pisania wirtualnych kierowców urządzenia Windows. 98 (VXD). Podobnie jak większość debugnerów trybu jądra do systemów operacyjnych Windows, debuger WDB386 wymaga dwóch maszyn i kabla zerowego modemu do pracy. Dwie maszyny są niezbędne, ponieważ część debugera, która jest wykonywana na maszynie docelowej, ma ograniczony dostęp do jego sprzętu, dzięki czemu wysyła jego wyjście i odbiera polecenia z innego urządzenia.

Debuger WDB386 ma ciekawą historię. Zaczęło się jako wewnętrzne narzędzie w tle Microsoft w wersji Windows 3.0. Trudno było go wykorzystać, a nie miał wystarczającego wsparcia na debugowanie kod źródłowy I inne przyjemne właściwości, które nas widziają Visual C ++ i Visual Basic Broń.

Zespół "Spot" (dot) jest najważniejszą cechą WDB386. Przez przerwanie Int 41 można rozszerzyć WDB386, aby dodać polecenia. Ta rozszerzalność umożliwia autorom sterowników VXD do tworzenia niestandardowych poleceń debugowania, które nadają im swobodny dostęp do informacji na swoich urządzeniach wirtualnych. Debugowanie wersja Windows. 98 Obsługuje wiele poleceń Dot, które umożliwiają obserwowanie dokładnego stanu systemu operacyjnego w dowolnym miejscu w procesie debugowania.

I386KD Debugger.

Windows 2000 różni się z systemu Windows 98, w tym, że rzeczywistą częścią debugera trybu jądra jest częścią NTOSKRNL. Exe - główny jądro pracy systemy Windows. 2000. Ten debuger jest dostępny zarówno za darmo (ukończenie studiów), jak iw sprawdzonych (debugowanie) konfiguracje systemu operacyjnego. Aby włączyć debugowanie w trybie jądra, ustaw parametr bootloader / debug, aby uruchomić. Ini, a ponadto opcja Bootloader / Debugport, jeśli trzeba ustawić wartość portu komunikacyjnego trybu jądra jądra, różniących się od cichy (som1). I386KD jest wykonywany na własnej maszynie i komunikuje się z maszyną Windows 2000 przez kabel zerowy modemu.

Ntoskrnl Debuger Tryb jądra. EXE robi tylko to, co wystarczy, aby kontrolować procesor, aby system operacyjny mógł zostać debugowany. Większość prac debugowania - przetwarzanie symbolu, przedłużone punkty przerwania i demontażu - odbywa się z boku 1386kd. W jednym czasie zestaw sterownika urządzenia Windows NT 4 (DDK) udokumentował protokół stosowany w kablu zerowym modemu. Jednak Microsoft już go nie udokumentuje.

Moc 1386kd jest oczywista, jeśli spojrzeć na wszystkie polecenia, które oferuje dostęp do wewnętrznego stanu systemu Windows 2000. Znajomość mechanizmu działania sterowników urządzeń w systemie Windows 2000 pomoże programistowi monitorować wyjście wielu poleceń. Pomimo całej mocy, I386kd prawie nigdy nie ma zastosowania, ponieważ jest to aplikacja konsoli, która jest bardzo nudna, aby wykorzystać poziomy źródła debugowania.

  • Autorski:

    Barinov S.S. SHEVCHENKO O.G.

  • Rok:
  • Źródło:

    Informatyka I. techologie komputerowe. / Materiały VI International konferencja naukowa i techniczna Studenci, absolwent studentów i młodych naukowców - 23-25 \u200b\u200blistopada 2010, Donieck, Donntu. - 2010. - 448 p.

adnotacja

Do systemu operacyjnego stosuje się analizę porównawczą debugowania trybu użytkownika i trybu jądra. Windows Microsoft., Wyróżnione różnice i problemy zorganizowania tego ostatniego debugowania. Na podstawie uzyskanych wyników główne wymagania dotyczące budowy debugentach reżimu jądra w przypadku awbuji awaryjnej i interaktywnej. Analiza została przeprowadzona istniejące rozwiązania Za zgodność z wymaganiami. W szczególności szczególna uwaga jest wypłacana do Debugera Microsoft Windows Windows.

Głównym elementem

Debugowanie jest procesem określania i wyeliminowania przyczyn błędów w oprogramowaniu. W niektórych projektach debugowanie trwa do 50% całkowitego czasu rozwoju. Debugowanie może być znacznie uproszczone przy użyciu specjalistycznych narzędzi, które są stale ulepszone. Głównym takim narzędziem jest debugger, który umożliwia kontrolowanie wdrażania oprogramowania, obserwuj jego ruch i zakłócać go. Narzędzia debugowania jądra są głównie używane przez deweloperów kierowców.

Zastosowano narzędzia rozwojowe oprogramowanie Oferuje programistę szeroką gamę możliwości. Wszelkie zintegrowane środowisko programistyczne obejmuje możliwość debugowania bez konieczności korzystania z mediów innych firm. Gdyby rozmawiamy Na oprogramowaniu systemowym i rozwijającym się w szczególności kierowców, dzięki jego specyfiki proces rozwoju jest niezwykle trudny i jest całkowicie zautomatyzowany. Wszystkie fazy rozwoju, w tym debugowanie, są oddzielone. Każdy z nich wymaga specjalnych warunków: Pisanie kodu programu jest wykonywane na pełnym fldedged system komputerowy, debugowanie - w systemie debugowania, testowanie - w zależności od okoliczności itp. Ten sam degger reżimu jądra jest bardziej złożony w rozwoju, a odpowiednio, mniej przyjazny.

Ogólnie rzecz biorąc, możemy porozmawiać o braku debugowania rdzenia. Chociaż środki są dostępne, często nie jest konieczne rozmowy o alternatywach. Na przykład, Debugger Microsoft Windows Debugger ma zbyt wysoki próg wejścia. Wielu programistów mówi o pierwszym negatywnym doświadczeniu podczas spotkania z nim, a większość jego możliwości pozostaje spalona.

W oparciu o strukturę wirtualnej przestrzeni adresowej, jeśli wystąpi błąd w aplikacji, aplikacja rejestruje dane w dowolną lokalizację pamięci, aplikacja spowoduje uszkodzenie tylko własnej pamięci i nie wpłynie na działanie innych Aplikacje i system operacyjny. Podczas gdy kod trybu rdzenia jest w stanie uszkodzić ważne struktury danych systemu operacyjnego, który nieuchronnie doprowadzi do wspólnej awarii. Nieefektywnie pisany sterownik może również powodować poważne degradację całego systemu operacyjnego.

    Nowoczesni debugery zapewniają następujące czynności podstawowe funkcje:
  • debugowanie na poziomie kodu źródłowego;
  • zarządzanie wykonawcze;
  • wyświetl i zmień pamięć;
  • zobacz i zmień zawartość rejestrów procesora;
  • wyświetl stos połączeń.

Aby ułatwić pracę z kodem demontażu, tak zwane są używane. Debugowanie postaci. Podczas pracy linkera, oprócz obrazu pliku wykonywalnego, można również utworzyć plik danych zawierający informacje, które nie są wymagane podczas wykonywania programu, ale jest niezwykle przydatny podczas debugowania: nazwy funkcji, globalnych Zmienne, opis struktur. Dostępne są znaki debugowania dla wszystkich plików systemu operacyjnego systemu Windows.

W ramach kontroli wykonania oznacza zdolność do przerywania i odnawiania wykonania kodu programu, aby uzyskać określone polecenie w kodzie programowym. Jeśli kod programu zostanie wykonany tryb krok po kroku - Występuje przerwanie dla każdego języka programowania Lexeme lub podczas opuszczania podprogramu. Dzięki swobodnej wykonaniu przerwanie wykonania występuje w zaawansowanych sekcjach kodu - miejsca, w których zainstalowane są punkty stopu.

Podczas przerywania kodu trybu rdzenia występuje następujący dylemat. Debuger w interakcji z programistą używa interfejsu użytkownika. Te. Przy minimum, widoczna część debugera jest wykonywana w trybie użytkownika i naturalnie wykorzystuje interfejs programowania aplikacji ( Windows API.), która z kolei polega na modułach trybu jądra. Zatem zawieszenie kodu trybu rdzenia może prowadzić do wzajemnego blokowania: System przestanie odpowiadać na żądania użytkownika.

Aby uzyskać dostęp do pamięci jądra, elementy debugera muszą być również wykonywane w trybie jądra. Prowadzi to do pojawienia się dwóch problemów naraz, które są oczywiste konsekwencje organizacji pamięci w trybie chronionym procesorem.

Pierwszy problem dotyczy transmisji adresów pamięci wirtualnych. Kierowcy stale współdziałają z aplikacjami systemu użytkownika, dodając dostęp do ich pamięci. System operacyjny Windows nadaje wirtualne adresy do fizycznego, prowadzonego przez koncepcję kontekstu strumieniowego. Kontekst strumienia jest strukturą odzwierciedlającą stan strumienia i w tym w szczególności zestaw rejestrów i inne informacje. Gdy sterowanie jest przesyłane do innego strumienia, pojawia się przełącznik kontekstowy, w którym informacje o jednym strumieniu jest zapisywane, a informacje o drugim jest przywrócone. Po przełączeniu kontekstu strumienia do strumienia innego procesu, również przełączany jest katalog stron używany do nadawania adresów wirtualnych do fizycznego.

Specyfika polega na tym, że podczas wysyłania połączeń systemowych system operacyjny Windows nie przełącza kontekstu. Dzięki temu kod trybu jądra może używać wirtualnego adresu trybu użytkownika.

W przeciwnym razie sytuacja jest wysyłana przerywa lub wykonywanie wątków systemowych. Przerwanie może wystąpić w dowolnym momencie, dlatego nie można przewidzieć, który kontekst strumienia zostanie użyty. Strumienie systemowe nie należą do żadnego procesu i nie mogą nadawać wirtualnego adresu trybu użytkownika. Stąd wynika, że \u200b\u200bw tych sytuacjach niemożliwe jest odwoływanie się do pamięci reżimu użytkownika.

Drugim problemem jest odwołanie się do ruchomej pamięci. Większość informacji w pamięci jest ruchoma i w dowolnym momencie można przenieść pamięć fizyczna na hDD. W pliku strony. Jeśli odnoszą się do strony, która jest nieobecna w pamięci fizycznej, w normalnej sytuacji, procesor wygeneruje przerwę pamięci Menedżera pamięci, w wyniku czego strona zostanie odczytana z pliku strony i załadowana do Pamięć fizyczna.

Opisane zachowanie zostało naruszone, jeśli kod programu DEGGGER jest zmuszony do użycia wysokiego poziomu zapytania przerwania (poziomy żądania przerwań, IRQL). Z IRQL, który zbiega się z lub przekraczającą Menedżerem pamięci IRQL, pani nie będzie w stanie załadować brakującej strony, ponieważ System operacyjny zablokuje błąd strony przerwania. Doprowadzi to do upadku systemu operacyjnego.

Debugowanie jest akceptowane do interaktywnych i nagłych wypadków. Dzięki interaktywnej lokalnej debugowaniu debugger jest wykonywany w tym samym systemie co obiekt debugowania. Z interaktywnym debugowaniem zdalnego debugowania, debugger i obiekt debugowania są wykonywane w różnych systemach. Podczas debugowania kodu jądra, system musi być monitorowany, począwszy od pierwszych etapów pobierania, gdy sieć nie działa jeszcze, zatem proste interfejsy szeregowe, takie jak COM, FireWire, USB, są używane do komunikacji systemów. Ostatnio, ze względu na trendy w rozwoju wirtualizacji oprogramowania na różnych poziomach abstrakcji, coraz bardziej przyciągają wirtualne maszyny. Guestside OS działa jako debugowany, umieszczony OS obejmuje interfejs użytkownika Debugera.

Tak więc w przypadku debugowania awaryjnego nie musisz instalować narzędzia debugowania na komputerze testowym. Rozkład systemu operacyjnego Windows obejmuje mechanizmy wdrażania awbuji awaryjnej. Przed ponownym uruchomieniem, system operacyjny może zapisać informacje o swoim stanie, że deweloper może analizować i dowiedzieć się. Ta informacja przechowywana w pliku nazywa się zrzutu pamięci.

Głównym sposobem debugowania trybu rdzenia są dostarczane przez producenta systemu operacyjnego Windows w ramach pakietu bezpłatnego dystrybucji " Narzędzia debugowania. Dla Windowsa. " Narzędzia obejmują odpowiednio urządzenia graficzne i konsolowe WindBG i KD (dalej Debuger Windows). Praca tych debugentów opiera się na mechanizmach przewidzianych przez deweloperów systemu operacyjnego i układać w jądrze.

Głównym trybem Windows Debuger jest tryb tłumacza polecenia. Dzięki struktura modułowaWraz z wysłanymi deweloperami polecenia Windows. Debuger obsługuje moduły innych firm zwanych rozszerzeniami. W rzeczywistości większość wbudowanych poleceń jest również zdobione w formie rozszerzeń.

Windows Debuger koncentruje się na zdalnym interaktywnym i awaryjnym debugowaniu, gdy ujawniono wszystkie jego możliwości. Jednocześnie, pełnoprawne lokalne interaktywne debugowanie nie jest obsługiwane: Debugger umożliwia przeglądanie niektórych struktur jądra.

Istnieje moduł rozszerzenia Debuger Windows o nazwie LiveKD, stworzony przez Mark Russinianovich, który w pewnym sensie wdraża lokalne interaktywne debugowanie. LiveKd w podróży tworzy wysypisko pamięci systemu roboczego i wykorzystuje go do debugowania.

Narzędzia "Narzędzia debugowania dla systemu Windows" są regularnie aktualizowane i obsługują wszystkie nowoczesne systemy operacyjne Windows.

Debugger do jądra Softice, wyprodukowany przez kompures w pakiecie oprogramowania Driverstudio, tradycyjnie wykonał alternatywę dla pakietu "Debuging Tools for Windows". Osobliwość Softive był wdrożeniem lokalnego interaktywnego debugowania na obsługiwanym sprzęcie. Debuger mógłby prawie całkowicie kontrolować działanie systemu operacyjnego.

Od 3 kwietnia 2006 r. Sprzedaż produktów rodzinnych Driverstudio zostały przerwane ze względu na "wiele problemów technicznych i biznesowych, a także ogólnego statusu rynku". Ostatnia wersja System operacyjny, którego wsparcie zostało wdrożone, to dodatek Service Pack 2. Z reguły, aktualizacje usług nie zmieniają interfejsu aplikacji systemu operacyjnego, ale numery połączeń systemowych i inne informacje nieudokumentowane mogą przejść zmianę. Debuger Softice polegał na sztywno przepisywanych adresach wewnętrznych struktur danych. W konsekwencji - z utrzymaniem kompatybilności Pack Service Pack 3 została złamana. Oczywiście więcej późniejszych wersji systemu operacyjnego Windows nie są również obsługiwane.

Syserowy debuger jądra stworzony przez małą chińską firmę Sysersoft jako wymiana debugera Softice. Pierwszy wersja ostateczna został wydany w 2007 roku. Jak Softice, Syser Debugger Kernel jest w stanie wykonywać interaktywne debugowanie w systemie operacyjnym. Obsługiwane są tylko 32-bitowe edycje nowoczesnych wersji systemu Windows.

Na ten moment Debuger Windows to główne narzędzie wśród programistów modułów jądra. Używa również zespołu rozwoju systemu operacyjnego Windows.

Jak uruchomić debuger jądra?

Odpowiedź mistrza:

W procesie rozwoju oprogramowania jest jeden bardzo ważny komponent - to debugowanie. W kierunku programy zastosowane Jest przeprowadzany za pomocą, że praca w trybie użytkownika i często osadzona w IDE. Aby móc odbiegać, na przykład, kierowca, debugger jądra należy uruchomić.

Musisz uruchomić procesor zespół CMD.. Otwórz menu Start na pasku zadań. W wyświetlonym oknie kliknij "Run ...". Pojawi się okno "Program startowy". W polu tekstowym wprowadź CMD, a następnie kliknij przycisk "OK".

Teraz twórz utworzyć kopię zapasową Plik boot.ini. Najpierw znajdź ścieżkę instalacji bieżącej kopii systemu Windows za pomocą polecenia: echo% systemroot%

Następnie przejdź do dysku, z zainstalowanym systemem operacyjnym, wprowadzając listy urządzeń, a po nich umieszczając dwukropek. Korzystanie z polecenia CD, przejdź do katalogu głównego. Teraz używając polecenia ADD, wyjmij atrybuty "ukryte", "tylko do odczytu" i "System" z pliku Boot.ini. Kopiuj polecenie Utwórz kopię zapasową, a następnie ustaw atrybuty do miejsca.

Aby usunąć aktualną listę opcji pobierania, użyj polecenia BootCFG / Query. Wyświetl listę i zdefiniuj ten element na podstawie których nowe ustawienia zostaną utworzone z możliwością debugowania w trybie jądra. Identyfikator rekordu rozruchowego należy zapamiętać.

Użyj polecenia BootCFG / Copy, aby utworzyć rekord rozruchowy. W celu określenia identyfikatora nagrywania, które będziesz kopiować, użyj parametru / ID. Korzystając z parametru / D, ustaw nazwę nagrywania, która zostanie wyświetlona. Teraz musisz wrócić do listy opcji pobierania za pomocą polecenia BootCFG / Query i spójrz na dodany identyfikator wpisu.

Teraz musisz włączyć opcje rozpoczęcia debugera jądra do wcześniej utworzonego rekordu rozruchowego. Jeśli debugujesz na maszynie docelowej, wystarczy dodać opcję / debugowanie.

Jeśli chcesz zaimplementować zdalne debugowanie za pomocą połączenia komputera docelowego za pośrednictwem portu COM do urządzenia hosta, a następnie użyj opcji / Port i / Baud, aby określić numer portu i kurs wymiany.

Jeśli jesteś zdalnie debugujący za pomocą kabla FireWire (interfejs IEEE 1394), aby włączyć odpowiedni tryb, użyj opcji / DBG1394 i określić numer kanału Option / Ch.

Aby upewnić się, że zmiany zostaną wykonane, zaznacz bagażnik za pomocą polecenia BootCFG za pomocą parametru / zapytania. Umieszczając polecenie wyjścia, zamknij okno procesora polecenia.

W razie potrzeby zmień ustawienia rozruchu systemu operacyjnego. Otwórz panel sterowania za pomocą menu Start i otwórz już w nim element "System". W oknie "Właściwości systemu", które otwierają się, wybierz kartę Zaawansowane. W tej karcie wybierz sekcję z nazwą "Pobierz i odzyskiwanie" i kliknij przycisk "Parametry". W oknie "Ładowanie i odzyskiwanie", które pojawi się, musisz aktywować opcję "Wyświetl listę systemów operacyjnych". Zamknij oba okno dialogowe za pomocą przycisku "OK".

Wykonaj komputer do ponownego uruchomienia. Wybierz Ładowanie za pomocą debugera. Zaloguj się do systemu i rozpocznij pracę na maszynie docelowej lub rozpocznij zdalne debugowanie. Skorzystaj ze środków jako Windbg i KD.

Debugger - drugi po kompilatorze konieczne jest tworzenie programów. Jednak wielu z tych, którzy piszą programy komputerowe i korzystać z debugera, nie wiem, jakie zasady i mechanizmy swojej pracy.


Trudno być debuggerem ...

W świetle faktu, że programiści korzystają z obiadu debugera i NOSNO, zwłaszcza gdy wchodzą do trybu głębokiego debugowania, warto powiedzieć, że jeśli debugger nie jest programem, ale kawałkiem żelaza, z pewnością przegrzał się i zepsułby . Ponieważ tyle pracy, jak bardzo odchodzi przez debugera, nie ma nawet kompilatora.

Oczywiście, od teraz wielu różnych języków programowania, a następnie debugnerów dla każdego z nich. I oczywiście dla różnych kategorii tych języków Istnieją różnice w pracy debugentach: na przykład debugent programów na temat interpretable Ruby będzie działać inne niż dla Kodeksu Bajtowego java Language., A z kolei debugger za Java będzie miał różnice z Visual C ++.

Porozmawiam o debugowaniu na platformie Windows. Realizując zasady pracy debugentach, możliwe będzie poradzić sobie z debugentami w ramach systemu POSIX oraz z debugentami, które nie działają na poziomie systemu operacyjnego, ale na poziomie maszyny wirtualnej lub dowolnego tłumacza .


Debugowie dla Windows: Dwa typy

W oknach znajdują się dwa fundamentalnie różne typy debugentów. Myślę, że wszystko było w obliczu wszystkiego, gdy zaprogramowano na Delphi (nie zaprogramowany na nim? Trudno uwierzyć. Co zaprogramujesz w szkole i na kursach juniorów?). Są to niestandardowe aplikacje debugenta. Są dość kilku, i istnieją indywidualnie, a (zwłaszcza na ten sposób, często) w ramach zintegrowanych środowisk rozwoju aplikacji. Wśród debugnerskich dystrybuowanych jako oddzielne produkty oprogramowania tradycyjnie przydzielają Ollydbg i kiedyś napisałem o tym w "Computer Westi".

Drugim typem debugnerów jest rdzeni debugerów systemu operacyjnego. Spotykają się i są używane rzadziej, a ich urządzenie różnią się znacznie od aplikacji użytkownika debugera. Najbardziej znany, a jednocześnie najlepszym roczniowym debuggerem jest Softice. Być może nie tylko o nim słyszałeś, ale nawet używany.

Ponieważ prace każdego z dwóch typów debugentów ma swoje specyfikę, powiem ci o każdym z nich.


Aplikacje użytkownika Debugger.

Debuger niestandardowych aplikacji jest prostsze, ponieważ czarna i brudna praca przybiera system operacyjny. Windows ma specjalne interfejsy oprogramowania, które są przeznaczone do debugowania aplikacji na poziomie użytkownika - nazywane są API Debugging Windows. Debugowanie API, które są wykorzystywane przez wszystkich debugatorów, którzy są osadzone w popularnych zintegrowanych środowiskach programistycznych dla systemu Windows.

Aby rozpocząć debugowanie, debuger musi rozpocząć debugowany proces specjalnie specjalnie - tak że system wie, że proces ten będzie debugujący. Po tym rozpoczyna się cykl debugowania: Program jest wykonywany przed rozpoczęciem określonego wydarzenia, który jest nazywany wydarzeniem debugowania lub wydarzeniem debugowania. W tym przypadku cykl debugowania jest uruchomiony w oddzielnym strumieniu, aby zapobiec zawieszaniu debugera.

Ale to dopiero początek. Ponieważ najciekawsza rzecz w pracy debugera zaczyna się, gdy wydarzyło się wydarzenie debugowania. W końcu, jaka jest praca debugera? Aby pomóc programista zlokalizować błąd z dokładnością do określonej funkcji, określonej operacji, specyficznej zmiennej. W tym twardym przypadku debuger może również pomóc systemowi operacyjnym.

Więc wydarzyło się wydarzenie debugowania, a potem konieczne jest jakoś dowiedzieć się, jak jest związane z tekstem programu. Jest to możliwe tylko wtedy, gdy specjalne informacje o debugowaniu są włączone w samym programie - karta debugowania znaków. Zawiera informacje o zgodności między adresami a funkcjami, typami danych, liczbą wierszy kodów. Dzięki nim jest to, że debugowanie, z którego każdy programista Windows jest znajomy. Tabele symboli mają różne formaty, dlatego nie zawsze jest możliwe debugowanie programu skompilowanego przez kompilatora pojedynczego dewelopera przy użyciu debugera z innego producenta. Jednakże, najczęstszym formatem może być nadal określony - jest to PDB (baza danych programu) i jest zaprojektowana, naturalnie, Microsoft Corporation.

Tak więc, jeśli tabela znaków debugowania ma format PDB, możesz użyć specjalnego narzędzia z Microsoft Corporation - symbolicznego procesora debugowania. Po wejściu do rdzenia systemu i nazywał się ImageHlp.dll, ale dawno temu został podświetlony w oddzielnej bibliotece. Procesor symbolu umożliwia znalezienie na danym adresie do najbliższej funkcji otwartej lub zmiennej globalnej, a także liczbie ciągu i nazwę pliku tekstowego źródła, w którym znajduje się ta linia. Obsługiwane są operacje odwrotne, na przykład, wyszukiwanie adresu adresu według jego nazwy.

To oczywiście nie jest całą pracą, że debuger jest zaangażowany w niestandardowe aplikacje. Na przykład, podczas debugowania aplikacji wielokrotnych, wiele bardzo subtelnych chwil związanych z interakcją przepływów. Nawet podczas debugowania takich stosunkowo prostych rzeczy, takich jak usługi, istnieją niuanse.

Ale na nuansach nie zatrzymamy się na końcu - na końcu artykułu, powiem ci, gdzie o nich przeczytać. Spójrzmy teraz na debugnerów jądra.


Debuger nuklearny

Core Debugers - Programy są znacznie bardziej skomplikowane niż debugery aplikacji użytkowników, a ja przypuszczam, że jest dość jasne, dlaczego: nie mają pomocnika w postaci systemu operacyjnego. W tym przypadku jest ich klient, ponieważ to jej, ostatecznie powinna się debugować.

Większość debugnerów jądra wymaga dwóch komputerów związanych z ich pracą, podłączony kabel zero-modemowy. Zero-modem jest sposobem na podłączenie dwóch komputerów bezpośrednio kabel bezpośrednio przez swoje porty COM lub LTP. Drugi komputer jest potrzebny, ponieważ część debugera, który siedzi na pierwszym (włączony, gdzie zainstalowany jest system zadłużenia), ma ograniczony dostęp do sprzętu, a zatem cały wyjście danych jest null na drugi komputer.

W nowoczesnych procesorach architektury Intel X86 są specjalne rejestry debugowania (w starym 368., aw nowszych modelach przetwórców zaledwie ośmiu, są one określane jako DR0-DR7). Rejestry te umożliwiają debuggerowi ustawienie punktów kontrolnych do czytania i nagrywania pamięci, a także na portach we / wy. Ogólnie rzecz biorąc, wszystko wygląda tak, a ja nie uważam, że jest szczegółowo opisany szczegółowo, dla którego każdy z rejestrów debugowania jest odpowiedzialny, co przerywanie są realizowane przez punkt przerwania i podaje inne podobne informacje. Lepiej opowiedzieć o konkretnych istniejących bookbugach jądra dla systemu Windows.

Po pierwsze, jest to debugger wbudowany w jądro systemu operacyjnego. Jest we wszystkich linijce OS NT, począwszy od systemu Windows 2000. Jest to część pliku ntoskrnl.exe, a można go włączyć, ustawiając opcję "/ debug" dla systemu operacyjnego w Boot.ini. Ten debugger potrzebuje połączenia zero-modemu i drugiego komputera z tymi samą operacją operacyjną.

Jest inny debuger z Microsoft - Windbg. Ściśle mówiąc, to nie jest debuger jądra, ale hybrydowy debuger, który może być również używany do debugowania aplikacji poziomu użytkownika. W przeciwieństwie do debugera osadzonego w rdzeniu, ma powłokę graficzną, a zatem łatwiej jest go używać. Ten debugger obsługuje również specjalne rozszerzenia, które mogą być przydatne podczas rozwiązywania niektórych zadań debugowania. Ale wymaga również dwóch komputerów do debugowania jądra.

Istnieje jednak debuger jądra, który może debugować na jednym komputerze. To jest softice. Jednocześnie Softice może debugować i aplikacje. Korzystanie z tego debugera dla programów użytkownika jest uzasadnione, na przykład, w przypadku debugowania systemów w czasie rzeczywistym związany z timerem systemowym. Jeśli naprawisz debugowanie za pomocą zwykłego debugera, wynik może być nieprawidłowy, nawet jeśli program jest prawidłowo operacyjny, a Softive zatrzyma program i zegar. Jest to przydatne podczas debugowania aplikacji wielu gwintowanych. Przez cały czas Softice ma bardzo dobrze rozwinięte środki wysyłania informacji o wszystkich przepływach w systemie, o synchronizacji strumieni dla aplikacji wielokrotnych, informacje o uchwycie "AH ... jedynym minusem tego debugera jest jego złożonością programatora aplikacji. Ale od rdzeniowych debugentach jest to najłatwiejsze i najbardziej skuteczne.


Najbardziej ciekawski

Teraz, oczywiście, rozmowa o Abuggerowi aplikacjami Windows nie jest tak istotna jak dziesięć lat temu. Cały świat zainteresowany Internetem, a główni użytkownicy Softice stał się doliną, niestrudzającymi pracownikami na piractwie NIVA. Niemniej jednak nie jest tak źle. Komunikacja z Softiceptem "OM, niewątpliwie rozwija osobę pod względem wiedzy na temat komputera, choć oczywiście, jeśli komunikujesz się tylko z debuggerem i nie komunikować się z żywymi ludźmi, niektóre skutki uboczne są możliwe. Cóż, o tym myślę wszyscy zgadują.

Debugery są jednym z najbardziej osobliwych rodzajów oprogramowania, ale pod względem rozwoju, nawet debugerów poziomu użytkownika są dość złożone. Ale jednak, jeśli masz pragnienie i czas, aby opracować własny debugger, twoja wiedza w dziedzinie systemów operacyjnych i programowania znacznie wzrośnie, a zatem szanse na wysoką płatną pracę wzrosną.

Jeśli chcesz stworzyć własny debugger, najpierw należy zapoznać się z materiałami na tym temacie. Moim zdaniem najlepszy zasiłek na początku będzie książka John Robbins "Debuging Windows Applications". Jest już stare, 2001 edycji, ale informacje określone w nim są istotne, a teraz, ponieważ ma wspólny, nawet w pewnym sensie fundamentalny charakter. W tej książce znajdują się przykłady pisania debugera dla systemu Windows, dodatkowo będzie przydatne dla Ciebie, jeśli programujesz na C ++ i chcesz lepiej zrozumieć przetwarzanie wyjątków. Właściwie to było z tej książki, której dowiedziałem się o debuggerze określonym w artykule. Jeśli ten książka nie będzie działać (w końcu jest już dość stara), istnieje kilka adresów, które można przydać. Pierwszy to jest: www.xakep.ru/post/19158/default.asp. Ten artykuł z magazynu "Hacker" mówi więcej szczegółów na temat debugerów jądra niż ja, a ponadto zawiera kod najprostszego debugera. A w Kalashnikoff.ru/aseMbler/issues/016.htm można nauczyć się napisać Dos Debugger. Ale oczywiście najlepiej jest czytać MSDN i jednocześnie znaleźć debugger z tekstami Open Source, aby sobie z tym poradzić. Cóż, oczywiście, jeśli przyszedłeś pisać debugera, a potem sukces w tej trudnej materii!

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu