Operációs rendszerek Bátfai Norbert Debreceni Egyetem Informatikai Kar (DE IK), Információ Technológia Tanszék egyetemi tanársegéd Dokumentum verzió: 0.0.1, DEIK_MIPPOS2_BN_12.odp Debrecen, december előadás – SZOFTVEREK FEJLESZTÉSE ÉS VIZSGÁLATA Programozó Páternoszter DE IK mérnök informatikus szak előadás
Operációs rendszerek előadás Bátfai, Norbert Debreceni Egyetem, Informatikai Kar, Információ Technológia Tanszék Copyright © 2008 Bátfai Norbert E közlemény felhatalmazást ad önnek jelen dokumentum sokszorosítására, terjesztésére és/vagy módosítására a Szabad Szoftver Alapítvány által kiadott GNU Szabad Dokumentációs Licenc 1.2-es, vagy bármely azt követő verziójának feltételei alapján. Nem változtatható szakaszok: A szerzőről. Címlap szövegek: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra. Hátlap szövegek: Belépés a gépek mesés birodalmába. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being: A szerzőről, with the Front- Cover Texts being: Programozó Páternoszter, Bátfai Norbert, Gép melletti fogyasztásra, and with the Back-Cover Texts being: Belépés a gépek mesés birodalmába. Felhasználási engedély A GNU Free Documentation License nem hivatalos magyar fordítása:
A tizenkettedik előadás vázlata Elmélet ● Nyomkövetés, tesztelés ● Buffer overflow, Memory leak ● Kolmogorov bonyolultság, Vitányi információs távolság Példák ● „Nyomkövető” printf, feltételes fordítás ● splint - A tool for statically checking C programs ● gcov - coverage testing tool ● gdb - A GNU hibakereső ● ddd - The Data Display Debugger ● valgrind - a suite of tools for debugging and profiling programs ● efence - Electric Fence Malloc Debugger ● Javát tanítok – Kolmogorov bonyolultságos részei ● CompLearn: Gyakorlat ● C forrásaink vizsgálata a fenti eszközökkel ● Számítások a CompLearn csomaggal: például manuál lapok, politikai beszédek, genomi és aminosav szekvenciák összehasonlítása
SYSCONF(3) Linux Programmer's Manual SYSCONF(3) NAME sysconf - Get configuration information at runtime SYNOPSIS #include long sysconf(int name); DESCRIPTION POSIX allows an application to test at compile- or run-time whether certain options are supported, or what the value is of certain config- urable constants or limits.... OPEN_MAX - _SC_OPEN_MAX The maximum number of files that a process can have open at any time. Must not be less than _POSIX_OPEN_MAX (20).... #include int main (void) { #ifdef OPEN_MAX #ifdef DEBUG printf ("OPEN_MAX definialt\n"); #endif printf ("OPEN_MAX=%d\n", OPEN_MAX); #else #ifdef DEBUG printf ("OPEN_MAX nem definialt\n"); #endif printf ("OPEN_MAX=%d\n", sysconf (_SC_OPEN_MAX)); #endif return 0; } Feltételes fordítás $ gcc openmax.c -o openmax $./openmax OPEN_MAX=1024 $ gcc -DDEBUG openmax.c -o openmax $./openmax OPEN_MAX nem definialt OPEN_MAX=1024
#include #define TOMB_MERET 10 #define ELOTTE 0 #define UTANA 1 char bsstomb[TOMB_MERET]; char * masol (const char *mit) { char mibe[TOMB_MERET]; char *p = mibe; char *vissza = mibe; for (; *p++ = *mit++;); // Vermen lokalisan foglalt terulet visszaadasa return vissza; } char * csmasol (char *hova) { int i = 0; for (i = -ELOTTE; i < TOMB_MERET + UTANA; ++i) *(hova + i) = '*'; // Eggyel tulirva a sztring lezarasa *(hova + TOMB_MERET) = '\0'; return hova; } int main (void) { char veremtomb[TOMB_MERET]; char *halomtomb; printf ("Verem tomb: [%s]\n", csmasol (veremtomb)); printf ("Masolt tomb: [%s]\n", masol (veremtomb)); printf ("BSS tomb: [%s]\n", csmasol (bsstomb)); halomtomb = (char *) malloc (TOMB_MERET * sizeof (char)); printf ("Heap tomb: [%s]\n", csmasol (halomtomb)); free (halomtomb); // Felszabaditott terulet hasznalata printf ("Heap tomb: [%s]\n", csmasol (halomtomb)); // Elfolyik a memoria halomtomb = (char *) malloc (TOMB_MERET * sizeof (char)); return 0; } $ gcc -O3 poloskak.c -o poloskak $./poloskak Verem tomb: [**********] Masolt tomb: [**********] BSS tomb: [**********] Heap tomb: [**********] poloskak.c
$ splint poloskak.c Splint Nov poloskak.c:20:10: Stack-allocated storage vissza reachable from return value: vissza... poloskak.c:42:42: Passed storage veremtomb not completely defined (*veremtomb... poloskak.c:55:41: Variable halomtomb used after being released Memory is used after it has been released (either by passing as an only param Finished checking code warnings... poloskak.c - splint - A tool for statically checking C programs // Vermen lokalisan foglalt terulet visszaadasa return vissza; // Felszabaditott terulet hasznalata printf ("Heap tomb: [%s]\n", csmasol (halomtomb)); printf ("Verem tomb: [%s]\n", csmasol (veremtomb));
$ gcc -fprofile-arcs -ftest-coverage poloskak.c $./a.out Verem tomb: [**********] Masolt tomb: [kriksz-kraksz] BSS tomb: [**********] Heap tomb: [**********] Segmentation fault (core dumped) $ gcov poloskak.c $ more poloskak.c.gcov... -: 10:char * -: 11:masol (const char *mit) 1: 12:{ -: 13: char mibe[TOMB_MERET]; 1: 14: char *p = mibe; 1: 15: char *vissza = mibe; -: 16: 11: 17: for (; *p++ = *mit++;); -: 18: -: 19: // Vermen lokalisan foglalt terulet visszaadasa 1: 20: return vissza; -: 21:} -: 22: -: 23:char * -: 24:csmasol (char *hova) 4: 25:{ 4: 26: int i = 0; 48: 27: for (i = -ELOTTE; i < TOMB_MERET + UTANA; ++i) 44: 28: *(hova + i) = '*'; -: 29: -: 30: // Eggyel tulirva a sztring lezarasa 4: 31: *(hova + TOMB_MERET) = '\0'; poloskak.c - gcov - coverage testing tool
gdb(1) GNU Eszközök gdb(1) NÉV gdb - A GNU hibakereső ÖSSZEGZÉS gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core] [-x cmds] [-d dir] [prog[core|procID]] LEÍRÁS Egy olyan hibakereső, mint a GDB, célja az, hogy betekintést nyújtson egy másik program ``belsejébe'', miközben az fut--vagy arra, hogy mit csinált egy másik program abban a pillanatban, amikor összeomlott. A GDB négy fő dologra képes (és még néhány egyébre is e négy dolog támogatásához), amelyek segítenek a működés közben való hibakeresésben: o Elindítja a programot,meghatároz bármely olyan dolgot, amely befolyásolhatja a működését. o Megállítja a programot meghatározott körülmények bekövetkeztekor. o Megvizsgálja, hogy mi történt, amikor a program megállt. o Megváltoztat dolgokat a programban, hogy kísérletezni lehessen a hiba következményeinek kijavítása érdekében, és folytathassa a munkát egy másik hibán.... $ gcc -ggdb poloskak.c -o poloskak $ gdb poloskak GNU gdb 6.6-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i486-linux-gnu"... Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". (gdb) break 43 Breakpoint 1 at 0x80484fd: file poloskak.c, line 43. (gdb) run Starting program: /home/norbi/OS/9/poloskak Verem tomb: [**********] Breakpoint 1, main () at poloskak.c:44 44 printf ("Masolt tomb: [%s]\n", masol (veremtomb)); (gdb) print veremtomb $1 = "**********" (gdb)... poloskak.c - gdb - A GNU hibakereső printf ("Verem tomb: [%s]\n", csmasol (veremtomb));
$ gcc -ggdb poloskak.c -o poloskak $ xxgdb poloskak poloskak.c - xxgdb - A GNU hibakereső
ddd - The Data Display Debugger
... #define ELEIRAS 0 #define TULIRAS 1... $ gcc poloskak.c -o poloskak $ valgrind -v --leak-check=full./poloskak ==6289== IN SUMMARY: 107 errors from 13 contexts (suppressed: 11 from 1) ==6289== ==6289== malloc/free: in use at exit: 10 bytes in 1 blocks. ==6289== malloc/free: 2 allocs, 1 frees, 20 bytes allocated. ==6289== ==6289== searching for pointers to 1 not-freed blocks. ==6289== checked 59,820 bytes. ==6289== ==6289== 10 bytes in 1 blocks are definitely lost in loss record 1 of 1 ==6289== at 0x : malloc (vg_replace_malloc.c:149) ==6289== by 0x804858F: main (poloskak.c:58) ==6289== ==6289== LEAK SUMMARY: ==6289== definitely lost: 10 bytes in 1 blocks.... poloskak.c - valgrind - a suite of tools for debugging and profiling programs... #define ELEIRAS 100 #define TULIRAS $ gcc poloskak.c -o poloskak $ valgrind -v./poloskak... ==13837== More than total errors detected. I'm not reporting any more. ==13837== Final error counts will be inaccurate. Go fix your program! ==13837== Rerun with --error-limit=no to disable this cutoff. Note...
#define ELEIRAS 0 #define TULIRAS 1... $ gcc -lefence poloskak.c -o poloskak $./poloskak Verem tomb: [**********] Masolt tomb: [kriksz-kraksz] BSS tomb: [**********] Electric Fence 2.1 Copyright (C) Bruce Perens. Heap tomb: [**********] Segmentation fault (core dumped) poloskak.c - efence - Electric Fence Malloc Debugger
Otthoni feladat: az eddig bemutatott eszközök közül (kivéve a nyomkövető printf-et és a feltételes fordítást) próbálj ki kettőt egy saját C programodra! „Bizonyítékul” a programod és néhány pillanatfelvételt küldj el az címemre, az „OS-OTTHONI- DEBUG” tárggyal. Kiemelt otthoni feladat: az eddig bemutatott eszközök közül (kivéve a nyomkövető printf-et és a feltételes fordítást) próbálj ki legalább négyet egy saját C programodra! „Bizonyítékul” a munkádat bemutató, azt részletesen leíró, pillanatfelvételekel bővített DocBook dokumentumot (és egy abból generált html lapot) (vagy esetleg egy OpenOffice dokumentumot) küldj el nekem az címemre, az „OS- KIEMELTOTTHONI-DEBUG” tárggyal.
csotanyirtas.c
Verem túlcsordulás (buffer overflow, buffer overrun)
Verem túlcsordulásos támadások
A Chaitin-Kolmogorov bonyolultság
1.8. példa - A Chaitin-Kolmogorov bonyolultság nem kiszámítható!
A Chaitin-Kolmogorov bonyolultság 1.8. példa - A Chaitin-Kolmogorov bonyolultság nem kiszámítható! for(;;) { sorozat = binárisba(i); if(bonyolultság(sorozat) > ) } A bonyolultság() függvény implementációja, feltevésünk szerint betű Kilép és kiírja a sorozatot. sorozat A teljes program hossza betű
CompLearn: The similarity metric
CompLearn:
CompLearn:
CompLearn:
Tippek a gyakorlatra
Köszönöm a figyelmet Az előadások és a gyakorlatok kölcsönösen, oda-vissza építenek egymásra. Skype: batfai.norbert MSN: Az óra fóruma: