Analiza wywołania i przebiegu przerwań w systemie Linux

Slides:



Advertisements
Podobne prezentacje
Introduction to SystemC
Advertisements

tworzenie połączeń sieciowych

Java Server Faces Tomasz Nowak.
ALLEGRO PIERWSZA GRA: WYŚCIG
C++ w Objectivity Marcin Michalak s1744. Pomocne pakiety: Data Definition Language (DDL). Standard Template Library (STL). Active Schema.
Wybrane elementy C#, BCL
dynamiczny przydział pamięci
argumenty wiersza poleceń: getopt
Dziel – Rządź - Złącz.
1 1 Przykład 1/3 main() { int i,j,k,m; /* i-m : $s0-$s3 */... i = mult(j,k);... m = mult(i,i);... } int mult (int mcand, int mlier){ int product; product.
STL - Standard Template Library Autor: Błażej Chodarcewicz rainbow.mimuw.edu.pl/~bc189380/STL/
GUI Struktury Spotkanie integracyjne Nazwa wydziału: EAIiE Nazwa katedry: Informatyka Miejsce i data prezentacji: Kraków,
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
Mirosław Ochodek Sponsorzy: JFace Jak jeszcze szybciej tworzyć interfejsy? ECESIS Eclipse Community Education Project An.
Rekursja Teoretyczne podstawy informatyki Wykład 5
Team Building Copyright, 2003 © Jerzy R. Nawrocki Requirements Engineering Lecture.
Ernest Jamro Kat. Elektroniki AGH, Kraków Dep. Of Electronics, AGH
Łukasz Monkiewicz.
Współprogramy Plan: Motywacja Składnia Scenariusz obiektu współprogramu Przykłady Producent – konsument ( instrukcja attach ) Czytelnik -pisarze ( instukcja.
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Aplikacje sieciowe Obiekty typu Socket. ServerSocket ClientSocket Socket ClientSocket Socket.
Zachodniopomorskie Centrum Edukacyjne Zadanie domowe.
„Accidentally in love”
Przykłady sieci obiektowych
„Tworzenie aplikacji sieciowych w języku Java”
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Networking Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Objects classes,
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Exceptions Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Threads Prezentacja.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Tworzenie aplikacji sieciowych w języku Java Java – overview.
Schemat Hornera Mgr inż. Michał Szucki.
DIRECT &INDIRECT QUESTIONS
Język C# Copyright, 2004 © Adam Czajka.
Czasu Present Simple używamy gdy mówimy O prawdach oczywistych O czynnościach wykonywanych regularnie O czynnościach długotrwałych i niezmiennych O uczuciach.
Python – typy danych, operacje we/wy, wyjątki, moduły i klasy
Monika Rokosik Katarzyna Rola. Wykrywanie kursu akcji poniżej dołka znajdującego się pomiędzy dwoma sąsiednimi górkami, z których późniejsza jest mniejsza.
Wyświetlacze LED.
Rozproszone transakcje z wykorzystaniem usługi Service Broker w SQL Server 2008 R2 Andrzej Ptasznik.
REKURENCJA.
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 7.
Algorytmy i struktury danych
sortowanie na bazie – wykorzystanie sortowania ze zliczaniem
Tajemnice klawiatury.
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
Przeglądanie inOrder function BSTinorder(BSTNode root) if root NOT NULL BSTinorder(root.left) Print(root) BSTinorder(root.right) 2, 4, 6, 8, 9, 10, 12,
Optimization Michał Drobot Technical Art Director Reality Pump.
Warsztaty C# Część 2 Grzegorz Piotrowski Grupa.NET PO
Budowa programu #include /*instrukcje preprocesora */ #include int main(void) { /*podstawowa funkcja programu */ int a=1; /*deklaracja i inicjalizacja.
Procesy i wątki dla dociekliwych
IBM Tivoli Storage Manager Strojenie A Presentation by Paweł Krawczyk June 8, 2011.
Teksty prymarne (original texts) to teksty autentyczne, nie są przeznaczone dla celów dydaktycznych; teksty adaptowane (simplified/adapted texts)są przystosowane.
Warsztaty użytkowników programu PLANS – Karwia06 Język makropoleceń JMP programu PLANS Część I mgr inż. Tomasz Zdun.
Instrukcja switch switch (wyrażenie) { case wart_1 : { instr_1; break; } case wart_2 : { instr_2; break; } … case wart_n : { instr_n; break; } default.
Instrukcje sterujące: W instrukcjach sterujących podejmowane są decyzje o wykonaniu tych czy innych instrukcji programu. Decyzje te podejmowane są w zależności.
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
TROCHĘ HISTORII Marek Zając PO CO UŻYWAĆ OPENCL? Marek Zając.
Algorytm testujący czy liczba jest liczbą pierwszą czy złożoną
Bazy Danych Programowanie w SQL Wojciech St. Mościbrodzki
Systemy operacyjne (wiosna 2014)
Piotr Czapiewski Wydział Informatyki ZUT.  Extensible Markup Language  Język znaczników  Human-readable and machine-readable  Niezależny od platformy.
Dr inż. Maciej Miłostan, Instytut Informatyki, Politechnika Poznańska
Wydział Elektroniki Kierunek: AiR Zaawansowane metody programowania Wykład 6.
Podstawy programowania (4)
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Previously discusses: different kinds of variables
Zapis prezentacji:

Analiza wywołania i przebiegu przerwań w systemie Linux Łukasz Mozgowoj - mlukasz@student.agh.edu.pl Mateusz Leśniak - lmateusz@student.agh.edu.pl

Czym jest przerwanie ? W systemie Linux, jest to sygnał wysłany procesorowi: Przez sterownik przerwań jakiegoś urządzenia - hardware interrupt Przez sam procesor z powodu błędów w wykonywanym kodzie (błędne instrukcje, odwoływanie się do pamięci w sposób niedopuszczalny, wywołania systemowe itp.) - exception

PIC - Programmable Interrupt Controller Obsługa przerwań PIC - Programmable Interrupt Controller

Schemat obsługi przerwań

Obsługa przerwań dla klawiatury Top Half Bottom Half irqreturn_t irq_keyboard_handler(int irq, void * data) { scancode = inb(0x0060); //Schedule tasklet_schedule(&task); long curTime = current_kernel_time().tv_nsec; inTime[interrupt_count % 64] = curTime; ++interrupt_count; return IRQ_NONE; } static void read_char(unsigned long data) { if (!(scancode & 0x80)) { handlingTime = current_kernel_time().tv_nsec-((long *)data) [tasklet_invoke_count % 64]; printk(KERN_INFO "MODULE 1: %ld\n", handlingTime); if ((scancode & 0x7F) == 0x48) buffer_add_string("${UP}"); else if ((scancode & 0x7F) == 0x4b) buffer_add_string("${LEFT}"); else if ((scancode & 0x7F) == 0x4d) buffer_add_string("${RIGHT}"); else if ((scancode & 0x7F) == 0x50) buffer_add_string("${DOWN}"); else if (upper == false) { if ((scancode & 0x7F) == 0x01) buffer_add_string("${ESC}"); else buffer_add_char(keymap[scancode & 0x7F]); } else buffer_add_char(keymap_upper[scancode & 0x7F]); } ++tasklet_invoke_count; DECLARE_TASKLET(task, read_char, (unsigned long) &inTime);

create_proc_read_entry("keylogger1", 0, NULL, read_buffer, NULL); void buffer_add_char(char c) { buffer[end] = c; end = (end + 1) % BUFFER_SIZE; if(!buffer_is_empty() && end == start){ start = (start + 1) % BUFFER_SIZE; } else { empty = NO; } char buffer_get(void){ if(!buffer_is_empty()){ char ret = buffer[start]; if(start == end){ empty = YES; return ret; return 0; int read_buffer(char *page, char **start, off_t offset, int count, int *eof, void *data) char tmp_buffer[BUFFER_SIZE+1]; int i = -1; while(!buffer_is_empty()){ tmp_buffer[++i] = buffer_get(); tmp_buffer[++i] = 0; return sprintf(page, "%s\n", tmp_buffer); Ring buffer /proc/keylogger create_proc_read_entry("keylogger1", 0, NULL, read_buffer, NULL);

Eksperymenty 1. Załadowanie modułu dla obsługi przerwań klawiatury: - Przyciskanie klawisza w losowych odstępach czasu - Przytrzymanie klawisza wciśniętego przez pewien czas 2 .Załadowanie modułu dla obsługi karty sieciowej - Bez próby wywłaszczania przez klawiaturę - Z próbą wywłaszczania przez klawiaturę 3. Załadowanie dwóch modułów dla obsługi klawiatury w trybie IRQF_SHARED

Odczytywanie wyników ping_regex = re.compile("^\[\s*\d+\.\d+\] ping : \d+$") module1_regex = re.compile("^\[\s*\d+\.\d+\] MODULE 1: \d+$") module2_regex = re.compile("^\[\s*\d+\.\d+\] MODULE 2: \d+$") if __name__ == '__main__': dmesg_data = exec_process(['dmesg'], True) regex = None if(len(sys.argv) != 2): print "usage: ./dmesg_reader <ping>|<module1>|<module2>" exit(-1) else: if sys.argv[1] == 'ping': regex = ping_regex elif sys.argv[1] == 'module1': regex = module1_regex elif sys.argv[1] == 'module2': regex = module2_regex for line in dmesg_data.split('\n'): if regex.match(line): _time = line.split(":")[1].strip(" ") print _time

Losowe wciskanie klawisza

Przytrzymany jeden klawisz

Klawiatura + włączony ping

Ping

Wywłaszczany ping

Dwa handlery klawiatury

Pytania ?