! 3% !"# Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Podobne dokumenty
%$-,./+,-.0! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Klonowanie MAC adresu oraz TTL

obsług dowolnego typu formularzy (np. formularzy ankietowych), pobieranie wzorców formularzy z serwera centralnego,

Zadania do wykonaj przed przyst!pieniem do pracy:

!"" ' #$$$%&' ()*$+&',! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

LABORATORIUM INFORMATYKI 0

Narzędzia debugowania kodu. Narzędzia debugowania kodu 1/33

Opera Wykorzystanie certyfikatów niekwalifikowanych w oprogramowaniu Opera wersja 1.1 UNIZETO TECHNOLOGIES SA

Proces tworzenia programu:

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

4CMSystem. Podrcznik uytkownika. Strona projektu: Realizacja projektu:

Instalacja programu Sprzeda z motorem. bazy danych Pervasive V8

Uywanie licencji typu Standalone. Japanese Using a Standalone License. Language. Contents

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

Uywanie licencji typu On-Demand. Using an On-Demand License Japanese. Language. Contents

Systemy operacyjne laboratorium 3 Paweł Gmys strona 1

Przegldanie stron wymaga odpowiedniej mikroprzegldarki w urzdzeniu mobilnym lub stosownego emulatora.

Java Code Signing Uycie certyfikatów niekwalifikowanych do podpisywania kodu w technologii Java. wersja 1.1 UNIZETO TECHNOLOGIES SA

zdefiniowanie kilku grup dyskusyjnych, z których chcemy odbiera informacje, dodawanie, usuwanie lub edycj wczeniej zdefiniowanych grup dyskusyjnych,

Tworzenie bazy danych Biblioteka tworzenie tabel i powiza, manipulowanie danymi. Zadania do wykonani przed przystpieniem do pracy:

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

Wprowadzenie do środowiska Qt Creator

1. Wprowadzenie do C/C++

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

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

Sposoby przekazywania parametrów w metodach.

Zastosowanie programu Microsoft Excel do analizy wyników nauczania

Mozilla Firefox PL. Wykorzystanie certyfikatów niekwalifikowanych w oprogramowaniu Mozilla Firefox PL. wersja 1.1

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

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

Wprowadzenie do kompilatorów

Instrukcja obsługi dodatku InsERT GT Smart Documents

Projektowanie bezpiecze stwa sieci

EC4P Pierwszy program w 6 krokach

Wprowadzanie i zmiany faktur z zakupu, wydruk rejestru zakupu

Instalacja Altium Designer Powizane wideo Altium Designer - Installation and Management

część 16 struktury rekurencyjne i ich zastosowania drzewa binarne, algorytmy rekurencyjne dla drzew binarnych

Architektura, oprogramowanie i uytkowanie klastra PCSS. Marek Zawadzki <mzawadzk@man.poznan.pl>

Kreator automatycznego uaktualniania firmware'u

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce.

Programowanie Systemów Wbudowanych

Przed instalacj naley sprawdzi wersj posiadanych sterowników urzdzenia. Powinna by nie starsza ni:

Program do konwersji obrazu na cig zero-jedynkowy

SUPLEMENT SM-BOSS WERSJA 6.15

1. Wprowadzenie do C/C++

Poniszy rysunek przedstawia obraz ukoczonej powierzchni wykorzystywanej w wiczeniu.

Podstawowe obiekty AutoCAD-a

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

Instalacja programu Sprzeda

Mieszko Cichowicz. Spis Treści

Instrukcja obsługi programu DIALux 2.6

Instrukcja obsługi programu Pilot PS 5rc

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

FAKTURA PRZEDPŁATA PODRCZNIK UYTKOWNIKA

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

Poradnik korzystania z serwisu UNET: Dostp do poczty elektronicznej ze strony WWW

Mozilla Thunderbird PL

Dodatki. Dodatek A Octave. Język maszyn

Programowanie Proceduralne

Poradnik korzystania z serwisu UNET: Konfiguracja programu pocztowego

Komputerowa Ksiga Podatkowa Wersja 11.4 ZAKOCZENIE ROKU

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Planowanie adresacji IP dla przedsibiorstwa.

Instrukcja Obsugi Programu

I N S T R U K C J A O B S Ł U G I

Spis treści PLIKI BINARNE W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF23

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Podstawy programowania w języku C++

... Ireneusz Mrozek. Wydział Informatyki

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Podstawy informatyki

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

!"# %!*%+,-.! Nazwy programów, polece, katalogów, wyniki działania wydawanych polece.

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

System midzybankowej informacji gospodarczej Dokumenty Zastrzeone MIG DZ ver Aplikacja WWW ver. 2.1 Instrukcja Obsługi

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

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

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie w języku Python. Grażyna Koba

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Twoja instrukcja użytkownika HP PAVILION DV6-1215SA

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Przywracanie systemu

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD.

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do systemu operacyjnego Linux uytkowanie cz. 1

Konfiguracja klientów SSH - PuTTY i WinSCP

Twoja instrukcja użytkownika HP PAVILION DV3520EA

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Twoja instrukcja użytkownika PHILIPS JR32RWDVK

Systemy wbudowane. Rysunek 1: Ilustracja procesu kompilacji oprogramowania

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Transkrypt:

!"# "! " $%&'%'( )*+,-%''! #! $!%% %.)%%'$*+,-! $%&" /%%! 0%%&'%! 12 1-2! 3% Czcionka o stałej szerokoci Nazwy programów, polece, katalogów, wyniki działania wydawanych polece. Czcionka o stałej szerokoci pogrubiona Podaje tekst, który naley dosłownie przepisa. W przypadku plików ródłowych wyrónia istotniejsze fragmenty. Czcionka o stałej szerokoci kursyw Tekst komentarza w przykładowych sesjach przy terminalu. Czcionka o stałej szerokoci kursyw pogrubiona Wyrónia istotniejsze fragmenty wyników działania wydawanych polece. opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 1

4! 5 Poniej pokazano bardzo prosty program, na bazie którego wykonane zostan wiczenia z podstaw obsługi programu gdb (GNU debugger). Przepisujc ten program naley oczywicie pomin numery linii, które nie s czci pliku ródłowego. Celem przykładowego programu jest próba nadpisania zabronionego obszaru pamici. Po uruchomieniu pojawia si komunikat: Segmentation fault (core dumped). Uwaga: aby na dysku utworzył si plik CORE trzeba wyda polecenie: ulimit -c 10000. Podana jako parametr liczba jest maksymalnym rozmiarem pliku CORE w KB - moemy ustawi j dowolnie do potrzeb. Moemy te poda zamiast liczby słowo kluczowe unlimited. Uwaga: administrator moe zabroni uytkownikom ustawia dowolnie du warto pliku CORE. Zapoznajmy si z poniszym tekstem, który został przepisany z oryginalnej dokumentacji GCC- HOWTO: Core files When Linux boots it is usually configured not to produce core files. If you like them, use your shell's builtin command to re-enable them: for C-shell compatibles (e.g. tcsh) this is % limit core unlimited while Bourne-like shells (sh, bash, zsh, pdksh) use $ ulimit -c unlimited Uwaga: wystpujce w przykładach frazy typu $xx (gdzie xx jest pewn liczb całkowit) oznaczaj kolejne lokalne zmienne, które powstaj w wyniku wykonania kolejnych polece debugger a. W twojej sesji liczby te najprawdopodobniej bd zupełnie inne. 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define BIGNUM 5000 5 6 // prototypy funkcji 7 void fun_error (int tab[]); 8 9 int main (void) 10 { 11 int tab[10]; 12 fun_error (tab); 13 exit (EXIT_SUCCESS); 14 } 15 16 void fun_error (int table[]) 17 { 18 int i; 21 } Poniej pokazano przykładow sesj przy komputerze. Pokazuje ona w zasadzie wszystkie te moliwoci programu gdb, które pozwalaj nam zlokalizowa i usun błdy w oprogramowaniu. Celem nabrania wprawy naley powtórzy na własnym komputerze t sesj. Wicej informacji na temat programu gdb mona znale w dokumentacji patrz spis literatury. opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 2

----------------------------- KOMPILACJA ----------------------------- Kompilujemy przykładowy program. Robimy to bez opcji g. Rozmiar pliku wynikowego wynosi 4883 bajty. $ gcc debug_example.c -o debug_example total 12 -rwxr-xr-x 1 artur users 4883 Apr 3 01:26 debug_example Kompilujemy przykładowy program. Tym razem robimy to z opcj g. Rozmiar pliku wynikowego powiksza si do 17415 bajtów. Zawiera on dodatkowo informacje przydatne do póniejszego debugowania. $ gcc -g debug_example.c -o debug_example total 24 -rwxr-xr-x 1 artur users 17415 Apr 3 01:26 debug_example Poleceniem ulimit ustawiamy moliwo generowania plików core (tzw. pliki rdzenia). Nastpnie wykonujemy program, który generuje błd ochrony pamici i w efekcie koczy działanie zrzucajc na dysk plik core. Uwaga: administrator moe zabroni uytkownikom ustawia dowolnie du wielko pliku CORE. Wydajc polecenie ulimit a moemy dowiedzie si jakie mamy przyznane limity. Zwykli uytkownicy mog te limity tylko zmniejsza! Wówczas opcja unlimited oczywicie nie zadziała. $ ulimit -c unlimited $./debug_example Segmentation fault (core dumped) total 76 -rw------- 1 artur users 61440 Apr 3 01:27 core -rwxr-xr-x 1 artur users 17415 Apr 3 01:26 debug_example --------------------- ROZPOCZCIE DEBUGOWANIA --------------------------- Rozpoczynamy sesj debugowania. Uywanie pliku rdzenia jest opcjonalne, ale zwiksza moliwo debugowania. Opcja q powoduje, e nie s wywietlane komunikaty licencyjne. Analizujc wynik widzimy, e program wygenerował sygnał 11, który oznacza błd segmentacji. Błd pojawił si prawdopodobnie w linii 20 (wg. pliku ródłowego) i on był powodem niespodziewanego zakoczenia działania programu. $ gdb -q debug_example core Core was generated by `_ ` a b '. Program terminated with signal 11, Segmentation fault. Reading symbols from /lib/libc.so.6...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/ld-linux.so.2...done. Loaded symbols for /lib/ld-linux.so.2 #0 0x08048440 in fun_error (table=0xbffffaa4) at debug_example.c:20 Z poziomu debugera uruchamiamy nasz program. Na ekranie widzimy komunikaty w zasadzie identyczne z tymi zapisanymi w pliku core. run opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 3

Starting program: /home/artur/c/debug/debug_example Program received signal SIGSEGV, Segmentation fault. 0x08048440 in fun_error (table=0xbffffaa4) at debug_example.c:20 --------------------- PRÓBA LOKALIZACJI BŁDU -------------------------- Wydajc polecenie backtrace generujemy tzw. drzewo funkcji, które doprowadziło do błdu segmentacji. Widzimy, e problem rozpoczł si w funkcji main (linia 9) w momencie wywołania funkcji fun_error (w linii 12). backtrace #0 0x08048440 in fun_error (table=0xbffffaa4) at debug_example.c:20 #1 0x08048402 in main () at debug_example.c:12 Uywajc funkcji list wywietlamy te wiersze z kodu ródłowego, które otaczaj podejrzany fragment kodu (u nas ten w linii 20). Domylnie polecenie list wywietla 10 wierszy. Mona uy polecenia list w takiej formie: list n,m gdzie n i m s odpowiednio pocztkowym i kocowym numerem wiersza, które chcemy wywietli. list 16,22 16 void fun_error (int table[]) 17 { 18 int i; 21 } 22 ------------------ PODGL DANIE WARTOCI ZMIENNYCH ---------------------- Drukujemy biec warto zmiennej i. Widzimy, e program pracował do momentu, gdy zmienna i osignła warto 343 (na twoim komputerze program moe załama si w innym momencie). print i $1 = 343 Dwa ponisze polecenia pokazuj, e program nie ma dostpu do pamici poczwszy od komórki 343 (to było powodem przedwczesnego zakoczenia działania programu), chocia ma legalny dostp do poprzedniej komórki pamici. print table[i] Cannot access memory at address 0xc0000000 print table[i-1] $2 = 342 print $1-1 $3 = 342 Ponisze polecenie NIE wywietli wartoci z tabeli table. Gdy program gdb przyjrzy si elementowi table i zobaczy, e jest to adres pierwszego elementu tablicy, to wywietli ten adres i 9 nastpnych wartoci jako adresy pamici. Uyteczno wyniku jest tu dyskusyjna. opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 4

Ogólna składnia polecenia: print tablica@numer, gdzie tablica jest nazw tablicy lub obszaru pamici, a numer jest liczb wartoci, które chcemy wywietli. print table@10 $4 = {0xbffffaa4, 0x0, 0x0, 0x8049590, 0x400097c0, 0x40130e58, 0x1, 0x4011012c, 0x0, 0x1} Wywietlamy 5 wartoci. Nawiasy kwadratowe wskazuj, e chcemy rozpocz od okrelonego miejsca w pamici. print table[25]@5 $5 = {25, 26, 27, 28, 29} Wywietlamy 10 pocztkowych wartoci (tablice w C s indeksowane od zera). print table[0]@10 $6 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Moliwe jest te formatowanie wydruku. Przykładowo argument polecenia print mona sformatowa jako liczb dwójkow (jest to ciekawa opcja, gdy w jzyku C nie ma kodu formatujcego argument binarnie!). Inne dostpne kody patrz dokumentacja gdb. print/x table[0]@15 $7 = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe} print/t table[200] $8 = 11001000 print/t 4294967295 // 4294967295 = 2^32-1; maksymalna warto int $9 = 11111111111111111111111111111111 print/t 4294967295+1 // 2^32 $10 = 0 Polecenie x umoliwia analiz zawartoci pamici. W pierwszej kolejnoci zapytamy si o adres 11-ego elementu (liczc od zera) tablicy table, a nastpnie wywietlimy warto 11-ego i 12-ego elementu tej tablicy w sposób poredni, czyli poprzez adres. (Uwaga: korzystajc z konsoli PuTTY, mona sobie ułatwi wprowadzanie długich elementów zaznaczajc na ekranie myszk jaki fragment, a nastpnie po ustawieniu kursora w podanym miejscu przeniesienie zaznaczonej wartoci poprzez kliknicie prawym przyciskiem myszki) print table+10 $11 = (int *) 0xbffffadc zaznacz to myszk...... i kliknij prawym klawiszem myszki x/2d 0xbffffadc // /2d wywietl dwa elementy dziesitnie 0xbffffadc: 10 11 x/2x 0xbffffadc // /2x wywietl dwa elementy szesnastkowo 0xbffffadc: 0x0000000a 0x0000000b Dostp do pamici jest kontrolowany. Przykładowo, wiemy z wczeniejszej analizy, e program zawiesił si przy wpisie do tablicy o indeksie 343. Zawartoci pamici poza tym adresem nie uda si wywietli. print i $12 = 343 print table+342 $13 = (int *) 0xbffffffc // warto typu (int*), czyli adres x/d 0xbffffffc 0xbffffffc: 342 print table+343 $14 = (int *) 0xc0000000 // size(int) = 4; 0xbffffffc + 0x4 = 0xc0000000 x/d 0xc0000000 0xc0000000: Cannot access memory at address 0xc0000000 opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 5

Za pomoc polecenia whatis moemy okreli typ zmiennej lub funkcji. whatis i type = int whatis table type = int * whatis fun_error type = void (int *) ------------------------ USTAWIANIE PUŁAPEK ---------------------------- Składnia: break numer_linii break nazwa_funkcji break nazwa_pliku:numer_linii break nazwa_pliku:nazwa_funkcji break numer_linii if wyraenie (pułapka warunkowa, bardzo uyteczne!) break nazwa_funkcji if wyraenie (pułapka warunkowa, bardzo uyteczne!) continue wznawianie wykonywania delete - kasowanie pułapek info breakpoints lista biecych pułapek Zakładamy pierwsz pułapk (warunkow) w linii 20 i uruchamiamy program. break 20 if i == 15 Breakpoint 1 at 0x8048430: file debug_example.c, line 20. run The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/artur/c/debug/debug_example Program przerwał działanie, gdy zmienna i osignła warto 15. Breakpoint 1, fun_error (table=0xbffffaa4) at debug_example.c:20 Potwierdzamy, e zmienna i rzeczywicie ma warto 15. print i $8 = 15 Gdy zapomnimy gdzie i jakie pułapki s załoone. Przypomni nam o tym polecenie breakpoints. info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y 0x08048430 in fun_error at debug_example.c:20 stop only if i == 15 breakpoint already hit 1 time delete 1 Zakładamy drug pułapk (warunkow) w linii 20 i uruchamiamy program. break 20 if i == 15 Breakpoint 2 at 0x8048430: file debug_example.c, line 20. run The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/artur/c/debug/debug_example Breakpoint 2, fun_error (table=0xbffffaa4) at debug_example.c:20 opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 6

print i $15 = 15 Zmieniamy w locie warto zmiennej i. Nadajemy jej warto 12. set variable i = 12 print i $16 = 12 Kontynuujemy wykonywanie programu (krokowo polecenie step). Uwaga: zamiast wpisywa za kadym razem słowo step moemy po prostu naciska ENTER, gdy program gdb pamita ostatnio wydane polecenie. step step print i $17 = 13 step step print i $18 = 14 step step Zmienna i ponownie osignła warto 15, wic uaktywniła si załoona wczeniej pułapka. Breakpoint 2, fun_error (table=0xbffffaa4) at debug_example.c:20 print i $19 = 15 Koczymy prace z debugerem. q A debugging session is active. Do you still want to close the debugger?(y or n) y Informacje dla debugera mona usun z pliku debug_example bez koniecznoci powtórnej rekompilacji programu bez uycia opcji g. Polecenie strip usuwa wszelkie symbole z dowolnego pliku (ang. strip - discard symbols from object files). total 12 -rwxr-xr-x 1 artur users 17415 Apr 3 01:26 debug_example $ strip debug_example total 24 -rwxr-xr-x 1 artur users 3056 Apr 3 01:26 debug_example Zauwa, e wielko pliku po zastosowaniu strip debug_example jest mniejsza, ni po kompilacji gcc debug_example.c -o debug_example. Oznacza to, e kompilator "samoistnie" dokłada do pliku wynikowego pewn ilo symboli. opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 7

----------------------------- WSKANIKI I ADRESY ------------------------- #include <stdio.h> #include <stdlib.h> int main (void) { int i = 0x81FF0F55; float f = 0.2; float *pf = &f; int *pi = &i; } // dwójkowo liczba 0.2 ma rozwinicie okresowe! Uwaga: po uruchomieniu debugera i wydaniu polecenia run, program poprawnie zakoczy si (gdy w odrónieniu od przykładów uywanych powyej nie jest błdny). Aby wic ponisze polecenie print pi nie zakoczyło si komunikatem: No symbol "pi" in current context. naley ustawi punkt zatrzymania (breakpoint), na przykład na ostatnim nawiasie klamrowym }. list 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main (void) 4 { 5 int i = 0x81FF0F55; 6 float f = 0.2; 7 float *pf = &f; 8 int *pi = &i; 9 return (0); 10 } break 8 Breakpoint 1 at 0x8048384: file debug2.c, line 8. Teraz mona ju kontynuowa wiczenie. Pamitajmy, e pi to wskanik na zmienn i. W wyniku dostajemy wic adres zmiennej a nie jej warto. print pi $2 = (int *) 0xbffffad8 Wywietlamy warto, na któr wskazuje wskanik (dziki przełcznikowi /t wynik jest w postaci dwójkowej). x/t 0xbffffad8 0xbffffad8: 10000001111111110000111101010101 Wewntrznie w rejestrach procesora liczba 4. bajtowa reprezentowana jest w postaci zwanej little endian (sposób zapisu słów bajtowych, w którym pierwszestwo ma bajt mniej znaczcy. Mniej znaczcy bajt wystpuje jako pierwszy). Teraz wywietlamy 4 kolejne bajty pamici poczynajc od adresu 0xbffffad8. x/4b 0xbffffad8 0xbffffad8: 01010101 00001111 11111111 10000001 Poniej pokazano zasad zapisu liczb w konwencji little endian. Warto zmiennej i: opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 8

10000001 11111111 00001111 01010101 // = 0x81FF0F55 Zamiana kolejnoci słów: 00001111 01010101 10000001 11111111 Zamiana kolejnoci bajtów w słowach: 01010101 00001111 11111111 10000001 Zobaczmy jak wyglda wewntrzna reprezentacja liczby zmiennoprzecinkowej 0.2. W zapisie dwójkowym nie da si jej przedstawi dokładnie! Dlaczego? print pf $1 = (float *) 0xbffffad4 x/t 0xbffffad4 0xbffffad4: 00111110010011001100110011001101 ^^^^^^^^^^^^^^^^^^^^ tu wida okresowo Dla liczb o pojedynczej precyzji (float) niedoskonało zapisu wida ju na 9. miejscu po przecinku. print f $3 = 0.200000003 x/f 0xbffffad4 0xbffffad4: 0.200000003 Uwaga. Polecenie x wymaga argumentu (adresu pamici). Niepodanie go, spowoduje wywietlenie wartoci pamici z przypadkowego adresu. Prawdopodobnie bdzie to nastpny adres w stosunku do poprzedniego wywołania polecenia x, ale reguły tu nie ma. Na pewno jednak na ekranie pojawi si dziwna warto x/f 0xbffffad5: -9.36942065e-38 "! Warto zapozna si te z nakładkami na gdb (bardzo ułatwiaj prac z debugerem) oraz kompilatorami klasy gcc przeniesionymi na platform Windows (zawieraj graficzne IDE): Literatura cgdb (http://cgdb.sourceforge.net/) dbvi (http://dbvi.sourceforge.net/) lcc-win32 (http://www.cs.virginia.edu/~lcc-win32/) darmowy kompilator ( klasy gcc ) dla Windows z bardzo funkcjonalnym interfejsem. DevC++ (http://www.bloodshed.net/devcpp.html) j.w. 1. Polecenia systemowe man gdb, info gdb, man strip 2. Using GDB: A Guide to the GNU Source-Level Debugger, Richard M. Stallman i Roland H. Pesch, July 1991. Tene tekst jest dostpny online jako wpis gdb programu info. Wydajc polecenie info gdb -o nazwa-pliku --subnodes moemy cały ten tekst zapisa do pliku tekstowego. 3. GDB Quick Reference, dostpne na stronie WWW prowadzcego. Dwie strony krótkiej ciagawki z polecenia gdb opracowali: dr in. Artur Gramacki, dr in. Jarosław Gramacki 9