Особенности национальной отладки Крис Касперски ака мыщъх Спецвыпуск: Хакер, номер #051, стр. 051-096-7 Вот протокол, полученный truss. Смотри, перед тем как умереть, программа открывает файл my_good_file, не находит его и, как следствие, сбрасывает кору впадая в нирвану. Разумеется, это простейший случай, но правило "десяти" гласит, что девяносто процентов времени отладки уходит на поиск ошибок, которые вообще недостойны того, чтобы их искали! __sysctl(0xbfbffb28,0x2,0x2805bce8,0xbfbffb24,0x0,0x0) = 0 (0x0) mmap(0x0,32768,0x3,0x1002,-1,0x0) = 671469568 (0x2805d000) geteuid() = 0 (0x0) getuid() = 0 (0x0) getegid() = 0 (0x0) getgid() = 0 (0x0) open("/var/run/ld-elf.so.hints",0,00) = 3 (0x3) read(0x3,0xbfbffb08,0x80) = 128 (0x80) lseek(3,0x80,0) = 128 (0x80) read(0x3,0x28061000,0x4b) = 75 (0x4b) close(3) = 0 (0x0) access("/usr/lib/libc.so.4",0) = 0 (0x0) open("/usr/lib/libc.so.4",0,027757775600) = 3 (0x3) fstat(3,0xbfbffb50) = 0 (0x0) read(0x3,0xbfbfeb20,0x1000) = 4096 (0x1000) mmap(0x0,626688,0x5,0x2,3,0x0) = 671502336 (0x28065000) mmap(0x280e5000,20480,0x3,0x12,3,0x7f000) = 672026624 (0x280e5000) mmap(0x280ea000,81920,0x3,0x1012,-1,0x0) = 672047104 (0x280ea000) close(3) = 0 (0x0) sigaction(SIGILL,0xbfbffba8,0xbfbffb90) = 0 (0x0) sigprocmask(0x1,0x0,0x2805bc1c) = 0 (0x0) sigaction(SIGILL,0xbfbffb90,0x0) = 0 (0x0) sigprocmask(0x1,0x2805bbe0,0xbfbffbd0) = 0 (0x0) sigprocmask(0x3,0x2805bbf0,0x0) = 0 (0x0) open("my_good_file",0,0666) ERR#2 'No such file or directory' SIGNAL 11 SIGNAL 11 Process stopped because of: 16 process exit, rval = 139 “…отладка подобна охоте или рыбной ловле: те же эмоции, страсть и азарт. Долгое сидение в засаде в конце концов вознаграждается. Очередной невидимой миру победой…” - (с) Евгений Коцюба. Добротно сверстанная документация на GDB (на русском языке): www.linux.org.ru/books/GNU/gdb/gdb-ru.pdf. Отличное руководство по внутреннему миру GDB (на английском языке). Очень помогает при доработке исходников: http://gnuarm.org/pdf/gdbint.pdf. Статья про трассировку в Linux с примерами простейших трассировщиков (во FreeBSD иначе): http://gazette.linux.ru.net/lg81/sandeep.html. Использование библиотеки CTrace для отладки многопоточных программ (на английском языке): www.linux-mag.com/2004-04/code_01.html. Исследование и отладка ELF-файлов на i386-платформе без исходных текстов: www.sstic.org/SSTIC03/articles/SSTIC03-Vanegue_Roy-Reverse_Intel_ELF.pdf. |