Debugowanie

Transkrypt

Debugowanie
Debugowanie
•Maciej Kalbarczyk
•Marcin Kosieradzki
Agenda
•Czy
m sąbugi
?
•Sposoby radzenia sobie z bugami
•Jakdzi
ał
adebuger
?
•Jakdzi
ał
apr
of
i
l
er
?
•I
nnenar
zędzi
a
Pierwszy bug
•
•
•
•
•
•
•
•
By
łf
i
z
y
cz
ny(
r
eal
ny
,spr
z
ęt
owy(
?))
,ni
epr
ogr
ami
s
t
y
cz
ny
Spowodowaławar
i
ękomput
er
a
Ni
ktni
ewi
edz
i
ałdl
acz
ego
apr
obl
emem okaz
ał
asi
ę.
.
.
Ćmapowoduj
ącaz
akł
óceni
a
Debuger
em by
l
i
popr
os
t
ul
udz
i
ewy
pat
r
uj
ącyni
epr
awi
dł
owości
Dor
oz
wi
ąz
ani
apr
obl
emuuż
y
t
o.
.
.pi
ncet
y
By
łt
or
ok1945,odt
egocz
asuwi
el
esi
ęz
mi
eni
ł
o,al
ej
edno
poz
ost
ał
o.
.
.
• Bugi
sąr
ówni
ei
r
y
t
uj
ącej
akt
enpowyż
sz
y
Opowi
emycz
y
m sąt
er
azi
j
aksobi
ezni
mi
moż
nar
adz
i
ć
(
j
użbezuż
y
ci
api
ncet
y
)
Rodzaje bugów
•Ni
espój
nyi
nt
er
f
ej
suży
t
kowni
ka
•Ni
espeł
ni
onewymagani
a
•Pr
obl
emywy
daj
ności
owe
•Ni
est
abi
l
nedzi
ał
ani
epr
ogr
amul
ub
uszkodzenie danych
Przyczyny powstawania
bugów
•Nierealne terminy
•Podej
ści
e:"
Naj
pi
er
wkoduj
,pot
em
my
śl
"
•Zł
ezr
ozumi
eni
ewy
magań
•Niewiedza lub brak wprawy u
programistów
•I
gnor
owani
ekwest
i
ij
akości
owy
ch
Fazy projektu a bugi
Faza
Bugi
Koszt
Planowanie
•Nierealny
harmogram
Wysoki
Projektowanie
•Zł
ez
r
oz
umi
eni
e
wy
magań
•Bł
ędy
architektoniczne
Potencjalnie bardzo
wysoki
Kodowanie
•Bł
ędy
programistyczne
Zal
eż
yodmoment
u
wykrycia
Testowanie
•Bł
ędypr
z
y
testowaniu
Wysoki
Uni
kani
ebł
ędów
•Udzi
ał
zespoł
upr
z
yust
al
ani
u
harmonogramu
•Dobry kontakt z docelowym
uży
t
kowni
ki
em
•Odpowi
edni
eumi
ej
ęt
ności
i
przeszkolenie
•Pr
zegl
ądykodu
Wykr
ywani
ebł
ędów
•Skut
ecznemechani
zmyobsł
ugi
bł
ędów
•Asercje
•Wsparcie kompilatora
•Analiza statyczna kodu
•Test
ypopr
awnośc
i
oweor
az
wydaj
nośc
owe
•Pomi
ar
ywydaj
nośc
i
Anal
i
zabł
ędów
•Rej
est
r
owani
epr
zepł
y
wukodu–
tracing
•Crash Dump
•Ręczneśl
edzeni
ekodu(
pr
zyuży
ci
u
debugera)
•Pr
zegl
ądani
ezmi
anwr
epozy
t
or
i
um
koduor
azsy
st
emi
eśl
edzeni
abł
ędów
Wsparcie platformy Windows
• Interfejs programistyczny
– Tr
y
buży
t
kowni
ka- Win32 Debugging API
– Tr
y
bj
ądr
a- Kernel Debugger
• Sy
mbol
edebuguj
ąc
e
• Wersja checked/debug systemu operacyjnego
• Li
c
z
ni
k
i
wy
daj
noś
c
i
• Just-In-Time Debugging
• Opcja automatycznego uruchamiania wskazanej
aplikacji pod debugerem
• Mechanizm minidumpów
Debugowanie w trybie
użyt
kowni
ka
• Debugowany jest konkretny proces
• Debugermadost
ępdopr
z
est
r
z
eniadr
esowej
procesu debugowanego
• Korzysta z Win32 Debugging API (aplikacje
natywne)
•I
ndy
wi
dual
neśr
odowi
skadl
aj
ęz
y
ków
interpretowanych oraz uruchamianych na
wirtualnej maszynie
• Pr
zy
k
ł
ady
:Vi
sualSt
udi
oDebugger
,Wi
nDBG
(
wt
r
y
bi
euży
t
kowni
ka)
,NTSD
Debugowanie w trybie
j
ądr
a
• "
Si
edz
i
"pomi
ędzysy
st
emem oper
acy
j
nym apr
ocesor
em
• Naj
cz
ęści
ej
debuguj
esi
ęwt
ensposób:st
er
owni
k
i
,
apl
i
kacj
ei
st
ot
ni
ez
al
eż
neodcz
asu
• Zatrzymanie debugera powoduje zatrzymanie systemu
operacyjnego
• W wi
ększ
oś
cipr
z
y
padkówwymagadodat
kowego
komputera do debugowana
• Nar
z
ędz
i
al
i
v
ekdor
azSof
t
I
CEpot
r
af
i
ądz
i
ał
aćnat
ej
samej maszynie
• Wbudowane wsparcie w NTOSKRNL.EXE (/DEBUG,
/DEBUGPORT)
• Pr
z
y
kł
ady
:KD,Wi
nDBG (
wt
r
y
bi
ej
ądr
a)
,Sof
t
I
CE
Konstrukcja debuggera
napr
zykł
adzi
eWi
n32
Debugging API
Szkielet debugera
Cr
eat
ePr
ocess(
…,DEBUG_PROCESS,…)
;
whi
l
e(
1==Wai
t
For
DebugEv
ent
(
…)
)
{
i
f(
EXI
T_PROCES…)
break;
Cont
i
nueDebugEv
ent
(
…)
;
}
Obj
aśni
eni
e
• Ur
uchami
anyj
estdodat
kowypr
oces(
z
ewz
gl
ędówbez
pi
ecz
eńst
wa)
,
wkt
ór
y
m będz
i
ewy
konywanaapl
i
kacj
adebugowana
• Przy uruchamianiu procesu konieczna jest flaga DEBUG_PROCESS
lub DEBUG_ONLY_THIS_PROCESS
• WaitForDebugEvent odbiera kolejne zdarzenia z procesu
debugowanego
• Cont
i
nueDebugEv
entpowoduj
ekont
y
nuacj
ęwy
konani
apr
ocesu
debugowanego po odebrau zdarzenia
• Zami
as
tt
wor
z
y
ćnowypr
ocesmoż
napodł
ącz
y
ćdebuggerdo
i
st
ni
ej
ącegopr
ocesupr
z
yuż
y
ci
uDebugAct
i
v
ePr
ocess
,koni
ecz
ny
jest wtedy przywilej SE_DEBUG_NAME.
Otrzymywane zdarzenia
•Ut
wor
zeni
e/
Zakończeni
epr
ocesul
ub
wąt
ku
•Wy
s
t
ąpi
eni
ewy
j
ąt
ku
•Zał
adowani
e/
Wy
ł
adowani
ebi
bl
i
ot
eki
•Otrzymanie komunikatu
debuguj
ącego
•Bł
ądsy
st
emowy
Dost
ępdopami
ęci
• Uchwyt do procesu potomnego posiada flagi
PROCESS_VM_READ oraz PROCESS_VM_WRITE,
kt
ór
ez
ez
wal
aj
ąnadost
ępdopami
ęciwi
r
t
ual
nej
pr
ocesu
potomnego przy wykorzystaniu ReadProcessMemory oraz
WriteProcessMemory
• Mechanizm copy-on-write zabezpiecza inne procesy
wy
konuj
ącet
ensam kodpr
zedmody
f
i
kacj
ąkodu
• Przy otrzymaniu zdarzenia OUTPUT_DEBUG_STRING
napi
snal
eż
ycz
y
t
aćzpr
z
est
r
z
eniadr
esowej
pr
ocesu
debugowanego
• Funkcj
eVi
r
t
ual
Quer
y
Ex,Vi
r
t
ual
Pr
ot
ect
Expoz
wal
aj
ąna
z
ar
z
ądz
ani
ez
abez
pi
ecz
eni
amist
r
onpami
ęci
.
Breakpointy
• Poz
wal
aj
ąnapr
z
er
wani
ewy
konani
apr
ocesuponat
kni
ęci
usi
ęna
wskaz
anąi
nst
r
ukc
j
ę
• Ustawienie breakpointa polega na podmienieniu instrukcji
(
z
apami
ęt
uj
ącj
ą!
)nai
ns
t
r
uk
cj
ępr
z
er
wani
adebugger
a–dla
i
386będz
i
et
o:I
NT3(
okodz
i
e0x
CC)
• W momenci
eki
edypr
ocesorwy
woł
aI
NT3z
wr
acanej
estz
dar
z
eni
e
debugger
a:wy
j
ąt
ekEXCEPTI
ON_BREAKPOI
NT
• Poodebr
ani
uwy
j
ąt
kunal
eż
ypodmi
eni
ćspowr
ot
em i
nst
r
uk
cj
ęnat
ę
z
apami
ęt
aną
• Doewent
ual
negopr
z
ywr
óceni
abr
eakpoi
nt
amoż
nawy
kor
z
y
st
ać
mechanizm SINGLE STEP (dla i386: ustawienie flagi TRAP)
• SI
NGLESTEPwy
konuj
ej
ednąi
ns
t
r
uk
cj
ępr
ocesor
a,anas
t
ępni
e
powoduj
ewy
j
ąt
ekEXCEPTI
ON_SI
NGLE_STEP
Symbol
edebuguj
ące
• Pozwal
aj
ąodcz
y
t
ać:
–Typy
–Nazwy symboli
–Naz
wypl
i
kówź
r
ódł
owy
c
hi
numer
yl
i
ni
i
kodu
• Pozwal
aj
ąnaanal
i
z
ęs
t
osuwywoł
ań,nawetw
przypadku zoptymalizowanego kodu
• Naj
cz
ęści
ejpr
z
echowywanesąwpl
i
kach
PDB (Program DataBase)
• Bi
bl
i
ot
ekaDBGHELP.
DLLuł
at
wi
a
wykorzystanie plików PDB.
Minidump
•Pozwal
aodzy
skaćst
anapl
i
kacj
i
z
innego komputera
•Uży
t
ecznypr
zyanal
i
zi
ebł
ędów
powst
ał
y
chukl
i
ent
a
•Wsparcie ze strony DBGHELP.DLL –
funkcja MiniDumpWriteDump,
MiniDumpReadDump
Rodzaje minidumpów
•Podstawowy –st
osywywoł
ań
•Z segmentami danych –st
ał
ew
kodzie
•Zcał
ąpami
ęci
ą
•Z informacjami o uchwytach
•Przefiltrowany –usuwanesą
prywatne informacje
•Inne (enumeracja MINIDUMP_TYPE)
Wsparcie platformy Linux
Bł
ędy
• Oops
Jaksobi
er
adzi
ć
?
•
•
•
•
•
•
•
Ni
er
obi
ćbł
ędów
Printk
Pliki Core (core dump)
Ptrace
GDB
KGDB
UML
Wsparcie platformy Linux
Oops
Czym jest Oops?
Gdyj
ądr
owy
kr
y
j
ei
st
ni
eni
epoważ
ny
chni
epr
awi
dł
owoś
c
iwy
woł
y
wanyj
est„
oops
”
.
Maondwi
egł
ównef
unkc
j
e:
• Pokazaćuży
t
ecz
nei
nf
or
mac
j
e,kt
ór
emogąby
ćuż
y
t
edozdi
agnoz
owani
a
przyczyny problemu.
• Spr
óbowaćz
apobi
ecbyj
ądr
oni
ewy
mknęł
os
i
ęspodkont
r
ol
iibyni
e
spowodował
oduż
opoważ
ni
ej
szy
chkonsekwencj
i(
j
akusz
kodz
eni
edany
chczy
nawetspr
zęt
u)
.
• Oopsmoż
et
wor
z
y
ćr
apor
tdopl
i
ku(
Oops.
f
i
l
e)
,kt
ór
egoogl
ądani
ewspomaga
program ksymoops
Wsparcie platformy Linux
Pr
zy
kł
ad
Unable to handle kernel NULL pointer dereference at virtual address 00000014
*pde = 00000000
Oops: 0000
CPU:
0
EIP:
0010:[<c017d558>]
EFLAGS: 00210213
eax: 00000000
ebx: c6155c6c
ecx: 00000038
edx: 00000000
esi: c672f000
edi: c672f07c
ebp: 00000004
esp: c6155b0c
ds: 0018
es: 0018
ss: 0018
Process tar (pid: 2293, stackpage=c6155000)
Stack: c672f000 c672f07c 00000000 00000038 00000060 00000000 c6d7d2a0 c6c79018
00000001 c6155c6c 00000000 c6d7d2a0 c017eb4f c6155c6c 00000000 00000098
c017fc44 c672f000 00000084 00001020 00001000 c7129028 00000038 00000069
Call Trace: [<c017eb4f>] [<c017fc44>] [<c0180115>] [<c018a1c8>] [<c017bb3a>]
[<c018738f>] [<c0177a13>]
[<d0871044>] [<c0178274>] [<c0142e36>] [<c013c75f>] [<c013c7f8>] [<c0108f77>]
[<c010002b>]
Code: 8b 40 14 ff d0 89 c2 8b 06 83 c4 10 01 c2 89 16 8b 83 8c 01
Wsparcie platformy Linux
Pr
zy
kł
ad
Jak widać na poprzednim przykładzie, uzyskujemy następujące informacje:
 Krótka informacja o przyczynie oopsa
 Numer oopsa
 Ustawienie flag procesora
 Zawartość głównych rejestrów
 Nazwę procesu, który spowodował oopsa
 Kilkanaście ostatnich ramek stosu
 Ślad i kod po którym nastąpił oops
Wsparcie platformy Linux
Pliki Core
• Pl
i
kc
or
e(
cor
edump)t
wor
z
onyj
es
twwy
ni
kuni
epr
awi
dł
owegodz
i
ał
ani
a
programu, lub wykonania niedozwolonej operacji
• W pl
i
kut
y
mz
api
s
anyzost
aj
est
anpami
ęc
iwmomenci
ewy
konani
a
niedozwolonej operacji (plus informacje dla debugera)
• W Li
nuksi
emoż
naogr
ani
czy
ćmaksy
mal
nąwi
el
kośćpl
i
kuc
or
e(
l
i
mi
tc
or
edump
10240)
• Ty
pybł
ędów:
•
•
•
•
•
•
BusEr
r
or(
ni
ez
godnościt
y
pów,bł
ędyI
/
O,dos
t
ępdoni
ei
st
ni
ej
ący
chur
z
ądzeń)
Memor
yFaul
t(
bł
ędydost
ępudopami
ęci
,z
akr
esy
,nul
lpoi
nt
er
,z
ł
er
ekur
encj
e)
I
OTTr
ap/BPTTr
ap(
puł
apki
(
Tr
ap)gener
owanepr
z
ezpr
oc
esor
)
Floating Exception (dzielenie przez zero, konwersje typów)
Segment
at
i
onFaul
t(
nar
usz
eni
esegment
ówpami
ęci
)
Illegal Instruction (bezsensowne (zdaniem procesora) i nielegalne instrukcje)
Wsparcie platformy –
Linux –PRINTK
kernel/printk.c
• Jestf
unkcj
ą,kt
ór
apowi
nnadaćwy
woł
aćsi
ęz
dowolnego kontekstu
• Wy
pi
suj
edopl
i
kul
ogówbądźnakonsol
ęi
nf
or
mac
j
ę
pr
z
ekaz
anąj
akoar
gument
• Jestpr
ost
awuży
ci
u
• Dz
i
ał
awt
r
y
bi
ej
ądr
a
• Ni
euży
wapośr
edni
ków
• Pr
óbuj
ez
doby
ćdost
ępdokonsol
i
(
semaf
or
)i
wy
pi
sać
komuni
kat
,agdyt
osi
ęni
eudaj
eit
akumi
esz
cz
agona
końcubuf
or
a
Wsparcie platformy –
Linux –PRINTK
kernel/printk.c
Funkcj
apr
i
t
nkpos
i
adadomyśl
ni
e8„
poz
i
omów”komuni
kat
ów(
odnaj
mni
ejważnego)
:
•
•
•
•
•
•
•
•
7 (KERN_DEBUG) –komuni
kat
ycz
ęst
ouży
wanepr
zyr
ozwi
j
ani
uj
ądr
a
6 (KERN_INFO) –informacje
5 (KERN_NOTICE) –istotne notatki
4 (KERN_WARNING) –ost
r
zeż
eni
a
3 (KERN_ERR) –bł
ędysy
s
t
emu
2 (KERN_CRIT) –bł
ędykr
y
t
y
cz
ne
1 (KERN_ALERT) –bł
ędyoznacz
eni
ual
ar
mowy
m
0 (KERN_EMERG) –sytuacje awaryjne
Wsparcie platformy –
Linux –PTRACE
• Jestf
unkc
j
ąsy
st
emowąumoż
l
i
wi
aj
ącąśl
edz
eni
epr
ocesów
• Umoż
l
i
wi
awst
awi
ani
ebr
eak
poi
nt
’
ówiz
at
r
z
y
my
wani
e
pr
ocesuśl
edz
onegopr
z
ezpr
ocesśl
edz
ący(
or
aznp.z
mi
anę
r
ej
es
t
r
ówpr
ocesuśl
edz
onego)
• Umoż
l
i
wi
apr
z
echwy
t
ywani
es
y
gnał
ówpr
z
ezpr
ocesś
l
edz
ąc
y
(
pr
z
edwy
konani
em sy
gnał
uj
ądr
os
pr
awdz
af
l
agęśl
edz
eni
ai
pr
z
ekaz
uj
est
er
owani
edopr
oc
esuśl
edz
ącego)
• Moż
eby
ćuż
y
t
adopodł
ącz
eni
asi
ędodz
i
ał
aj
ącegopr
ocesu
• bądź(
pr
z
ypomocywai
t
,f
or
ki
ex
ec)oj
ci
ecmoż
eśl
edz
i
ć
swoj
edz
i
ec
ko,kt
ór
es
amoz
gł
osi
ł
oc
hęćby
ci
aś
l
edz
ony
m
Danypr
oc
esmoż
eby
ćśl
edz
onyt
y
l
kopr
z
ezj
edenpr
oces.
Wsparcie platformy –
Linux –PTRACE
I
nf
or
macj
ęoś
l
edzeni
upr
z
ec
howuj
ez
mi
ennapt
r
ac
ewt
ask_st
r
uct
•
linux/sched.h
#def
i
nePT_PTRACED
0x
00000001/
/
i
nf
or
mac
j
awt
ask
_s
t
r
uc
toby
c
i
uś
l
edz
ony
m
struct task_struct {
...
unsigned long ptrace;
}
pr
zyś
l
edz
eni
uz
mi
eni
anyj
estakt
ual
nyr
odz
i
cpr
oces
uś
l
edz
onego
kernel/ptrace.c
56 int ptrace_attach(struct task_struct *task)
...
81
102 int ptrace_detach(struct task_struct *child, unsigned int data)
...
task->ptrace |= PT_PTRACED;
...
111
child->ptrace = 0;
...
88
REMOVE_LINKS(task);
89
task->p_pptr = current;
90
SET_LINKS(task);
114
REMOVE_LINKS(child);
115
child->p_pptr = child->p_opptr;
116
SET_LINKS(child);
Wsparcie platformy –
Linux - STRACE
• St
r
acet
onar
zędz
i
ebadaj
ącei
nt
er
akcj
epr
ogr
amuzj
ądr
em Li
nuksa
• Uruchomienie strace nazwa_programu wykonuje nazwa_programu,
wypi
suj
ef
unkcj
esyst
emowewywoł
ywanepr
zezpr
ocesor
azsygnał
y
j
aki
edopr
ocesudot
ar
ł
y
• Li
ni
ewyj
ści
azawi
er
aj
ąnaz
węwywoł
ani
asyst
emowego,par
amet
r
yor
az
war
t
ośćz
wr
óconąnp.
[mk209470@violet10 debug]$ strace cat /dev/null
execve("/bin/cat", ["cat", "/dev/null"], [/* 46 vars */]) = 0
...
close(3)
= 0
open("/lib/libc.so.6", O_RDONLY)
= 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0pQ\1\000"..., 512) = 512
...
open("/dev/null", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
read(3, "", 4096)
= 0
close(3)
= 0
close(1)
= 0
exit_group(0)
= ?
Wsparcie platformy –
Linux - GDB
GNU Project Debugger –pozwala na:
• Uruchomienie programu wraz z podaniem mu odpowiednich
argumentów
• Zat
r
z
y
mani
edz
i
ał
ani
apr
ogr
amuwokr
eś
l
ony
m mi
ej
scu
• Sprawdzenie parametrów programu na danym etapie
• Zmi
anęni
ekt
ór
y
chpar
amet
r
ówwcz
asi
edz
i
ał
ani
apr
ogr
amu
• Tworzenie plików Core z programu
• Anal
i
z
ęut
wor
z
ony
chpl
i
kówCor
e
• Pr
z
echwy
t
ywani
eiobsł
ugęsy
gnał
ówwy
sy
ł
any
chdopr
ogr
amu
śl
edz
onego
• Pr
z
egl
ądani
eiobs
ł
ugęwąt
kówpr
ocesu
Wsparcie platformy –
Linux - GDB
GDB –Jakur
uchomi
ć
• Kompi
l
uj
emypr
ogr
am zopcj
ądoł
ącz
ani
asy
mbol
i
(gcc –g program.c –o program)
• Ur
uchami
amyśl
edz
eni
epr
ogr
amupopr
z
ezGDB
(gdb program)
• Wstawiamy breakpointy (na numer lini, adres szesnastkowy,
bądźnaz
węf
unk
cj
i
)
(break 12, break *0x001573ca, break printf)
• Uruchamiamy program
(run)
Wsparcie platformy –
Linux - GDB
Pr
ogr
am z
at
r
z
y
masi
ęnanaj
bl
i
ż
sz
y
m ust
awi
ony
m br
eakpoi
nt
’
ci
e
Moż
emymi
ędz
yi
nny
mi
:
• Obej
r
z
ećz
awar
t
oś
ćz
mi
enny
c
h,r
ej
est
r
ów
(print nazwa_zmiennej, print $eax)
• Zmi
eni
ćz
awar
t
ośćz
mi
enny
c
h,r
ej
est
r
ów(
set$eax
=1)
• Obej
r
z
ećz
awar
t
oś
ćr
amekst
osu(
bac
kt
r
ace)
• Zdez
asembl
owaćf
unkc
j
ę(
di
s
aspr
i
nt
f
)
• Spr
awdz
aćadr
esyl
i
ni(
i
nf
ol
i
ne15)
• Wy
pi
saćk
odź
r
ódł
owysy
mbol
u(
l
i
stmai
n)
• Wz
nowi
ć,z
at
r
z
y
maćpr
ogr
am (
nex
t10,st
op)
Wsparcie platformy –
Linux - KGDB
• KGDBni
ej
estgr
af
i
cz
nąnakł
adkąnaGDB(
j
estni
ąXXGDB)
• Jestdebuger
em podobny
m doGDB,al
epoz
wal
adebugować
Jądr
oLi
nuk
sa
• Umoż
l
i
wi
am.
i
n.wst
awi
ani
ebr
eakpoi
nt
’
ówdoj
ądr
a,
uruchamianie go krok po kroku oraz obserwowanie zmiennych
• GDBdz
i
ał
al
okal
ni
e
• KGDBwy
magadopr
acydwóc
hkomput
er
ówpoł
ącz
ony
ch
ł
ącz
em sz
er
egowy
m
• Naj
edny
mk
omput
er
z
eur
uc
hami
amydebugowanej
ądr
o
• Na drugim z nich odpalamy debuger
• Tocz
onesąpr
acenadkont
r
ol
ąni
epopr
z
ezł
ącz
esz
er
egowe,a
popr
z
ezsi
ećet
her
net
Wsparcie platformy –
Linux - KGDB
• KGDBdl
akomput
er
adebugowanegodost
ępnej
estpopr
z
ez
pat
c
hnaj
ądr
oLi
nuksa
• Pr
z
yur
uchami
ani
unat
est
owany
m komput
er
z
e,j
ądr
oz
acz
ek
ana
nawi
ąz
ani
epoł
ącz
eni
azmasz
y
nyt
est
uj
ącej
• Moż
l
i
wej
estt
akż
edebugowani
emoduł
ów,pr
z
ycz
y
m nal
eż
yj
e
kompi
l
owaćzopcj
ą–g dla kompilatora gcc
• Ładowani
emoduł
ównamasz
y
ni
et
est
owanej
odby
wasi
ę
standardowo (insmod/ modprobe)
• Moż
nat
akż
ez
ał
adowaćmodułnamasz
y
ni
et
est
uj
ąc
ej
(
posł
uguj
ącsi
ędost
ar
cz
ony
m skr
y
pt
em)
Wsparcie platformy –
Linux - KGDB
• Namasz
y
ni
et
est
uj
ąc
ejur
uchami
amydebugerGDB
• Łącz
y
mysi
ęzmasz
y
nąt
est
owanąpopr
z
ezpor
tsz
er
egowy
(target remote /dev/ttyS1)
• Pr
z
ekaz
uj
emydomasz
y
nyt
es
t
owanejchęćz
ał
adowani
aj
ądr
a
(continnue)
• Moż
emyuż
ywaćGDBpodobni
ej
akdl
az
wy
kł
egopr
ogr
amu:
- pr
zer
y
waćpr
acęj
ądr
awdowol
ny
m momenci
e(
ct
r
l
+c)
- ust
awi
aćbr
eakpoi
nt
’
y
- odcz
y
t
ywaćzawar
t
oś
ćz
mi
enny
chir
ej
es
t
r
ów
- odcz
y
t
ywaćst
os
- odcz
y
t
ywaći
nf
or
macj
ęowąt
kachj
ądr
a
Wsparcie platformy –
Linux - UML
• UML, czyli User-Mode-Li
nuxt
oj
ądr
our
uchami
anewpr
z
est
r
z
eni
uż
y
t
kowni
kaj
akz
wy
kł
ypr
ogr
am
• UMLpr
z
y
pomi
namasz
y
nęwi
r
t
ual
ną
• Posi
adawł
asnyni
ez
al
eż
nys
c
hedul
eri
sy
st
em pami
ęc
iwi
r
t
ual
nej
• Moż
eby
ć(
odni
edawna)ur
uc
hami
anepodsamy
m sobą
• Ws
pół
pr
acuj
em.
i
n.
.zur
z
ądz
eni
amibl
ok
owy
mi
,konsol
ami
,
por
t
ami
,si
eci
ą,dź
wi
ęki
em,ur
z
ądz
eni
amiUSB,ur
z
ądz
eni
ami
PCI
• Ws
pi
er
awi
el
opr
oc
esor
owość(
SMP)
• Wy
magaspecj
al
nejk
ompi
l
acj
i
(
t
z
n.ni
eur
uchami
amyz
wy
kł
ego
j
ądr
awt
r
y
bi
eUML,al
ekompi
l
uj
emyj
ądr
oUML,aur
uchami
amy
j
akz
wy
kł
ypr
ogr
am)
Profile'owanie
•Opt
y
mal
i
zacj
awy
daj
ności
•Opi
er
asi
ęnapowi
ązani
u
fragmentów kodu programu ze
statystykami wykorzystania
zasobów
•Zazwyczaj korzysta z
instrumentacji kodu
Instrumentacja kodu –
podej
ści
a
•Ingerencja w niezoptymalizowany kod
assemblerowy
•Wy
kor
zy
st
ani
emożl
i
wości
kompi
l
at
or
a,np.pr
zeł
ąc
zni
ków/
Gh
/GH kompilatora Visual C++
•Wykorzystanie Profiling API dla kodu
platformy .NET
.NET Profiling API
• Poz
wal
amoni
t
or
ować:
–
–
–
–
–
–
–
–
–
–
Ur
uchomi
eni
e/
Zakończ
eni
eCLR,Domenapl
i
kacj
i
Zał
adowani
e/
Wy
ł
adowani
eZes
t
awów,Moduł
ów,Kl
as
Aspekt
yz
wi
ąz
anezkodem nat
y
wny
m,COM
Dz
i
ał
al
nośćJ
I
Tt
er
a
Dz
i
ał
al
nośćGar
bageCol
l
ec
t
or
a
Wchodzenie/Opuszczanie metod
Obi
ekt
ys
t
er
t
yz
ar
z
ądz
anej
Wy
j
ąt
ki
Wąt
ki
Wykorzystanie Remotingu
• Funkcj
onal
nośćudost
ępni
anaj
estpr
z
ezi
nt
er
f
ej
s
ICorProfilerInfo
Inne techniki oraz
nar
zędzi
a
DLL Injection
•Techni
k
apozwal
aur
uchomi
ćk
odwj
uż
dz
i
ał
aj
ący
m pr
oc
es
i
e
•Uruchamiany jest CreateRemoteThread
zews
k
aźni
k
i
em naf
unkc
j
ęLoadLi
br
ar
y
,
copowoduj
ez
ał
adowani
ews
kaz
anej
biblioteki
•W czas
i
eł
adowani
abi
bl
i
ot
ekiur
uchamany
jest DllMain, w którym wykonujemy nasz
kod
Fault Injection
•Testowanie programu w warunkach
ekstremalnych
•Symulowanie wszelkiego rodzaju
bł
ędów
•Umożl
i
wi
apr
zedewszy
st
ki
m
znal
ezi
eni
ebł
ędówwkodzi
eobsł
ugi
bł
ędów
•Pr
zy
kł
ad:Hol
odeck
Wykrywanie
zakl
eszczeń
• Potrzebne informacje na temat zakleszczenia:
i
dent
y
f
i
k
at
or
yz
akl
esz
cz
ony
chwąt
ków,obi
ekt
y
sy
nchr
oni
z
uj
ące,f
unkc
j
aWI
NAPIpowoduj
ąca
zakleszczenie wraz z parametrami
• Wy
kor
z
y
st
uj
et
echni
kępodmi
anyadr
es
ów
f
unkcj
isy
st
emowy
chzwi
ąz
any
chz
sy
nchr
oni
z
acj
ąwt
abl
i
cyI
AT(
i
mpor
taddr
ess
tables)
Application Verifier
• Testuje:
–
–
–
–
–
–
–
Wykorzystanie niebezpiecznego API
Wy
j
ąt
ki
–czy aplikacja nie "zamiata pod dywan"
Uchwyty
Sterta
Blokady
Pami
ęć
Wykorzystanie Thread Local Storage
• Pot
r
af
i
sy
mul
ować:
– Brak zasobów
– Pr
acępr
zyogr
ani
cz
ony
c
hpr
zy
wi
l
ej
ac
h
• Wykorzystuje debuger, np. WinDBG
• Wykorzystywany w testach platformowych np. Designed for Windows
XP
Analiza statyczna kodu
•Anal
i
z
uj
ek
odźr
ódł
owyal
bok
odpoś
r
edni
•Wymusza stosowanie pewnych
standardów
•Wy
kr
y
wapot
enc
j
al
nebł
ędy
•Możl
i
wośćdodawani
awł
as
nyc
hr
eguł
•PREfast dla kodu C/C++
•FXCop dla kodu .NET
Pytania?
Bibliografia
• John Robbins - Debugging Applications for Microsoft
.NET and Microsoft Windows
• Microsoft Developer Network Library –
http://msdn.microsoft.com/library/
• Mark Russinovich, Bryce Cogswell –SysInternals –
http://www.sysinternals.com/
• http://kgdb.linsyssoft.com
• Źr
ódł
aLi
nuksa2.
4.
31
• http://www.urbanmyth.org/linux/
Dzi
ękuj
emyza
uwagę

Podobne dokumenty