Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
40
Rozdział2:KluczowekoncepcjesystemuWindows
Pliksymbolimusizostaćutworzonywtymsamymczasie,coodpowiadającymuplik
wykonywalny
,inaczejniebędzieuważanyzapoprawnyimechanizmdebugowania
możeodmówićjegoużycia.StarszewersjeMicrosoftVisualC++tworzyłyplikisym-
bolitylkowkompilacjachwykonywanychzopcjąDebug,chybażeprogramistajaw-
niezmieniłkonfiguracjękompilatora.Nowszewersjetworząplikisymbolirównież
wkompilacjachfinalnych(Release),zapisującjewtymsamymkatalogu,copliki
wykonywalne.MicrosoftVisualBasic6możetworzyćplikisymboli,alenierobitego
przyustawieniachdomyślnych.
Plikisymbolimogązawieraćinformacjenaróżnychpoziomachszczegółowości.
Pełneplikisymboli(niekiedynazywaneprywatnymi)zawierająszczegóły
,którenie
występująwpublicznychplikachsymboli,wtymścieżkęplikuźródłowegoinumer
wierszawewnątrztegopliku,wktórymdanysymbolzostałzdefiniowany
,nazwyitypy
parametrówfunkcji,atakżenazwyitypyzmiennych.Firmyprogramistyczne,które
udostępniająnazewnątrzplikisymboli,zazwyczajoferujątylkopubliczneplikisym-
boli,zachowującpełneplikidowewnętrznegoużytku.
PakietDebuggingToolsforWindowsumożliwiapobraniewłaściwychplikówsym-
bolinażądaniezserwerasymboli.Serwertakimożeprzechowywaćplikisymbolidla
wieluróżnychkompilacjiokreślonegoplikuwykonywalnego,zaśDebuggingTools
pobierzeten,którypasujedoanalizowanegoobrazu(wykorzystujewtymcelusyg-
naturęczasowąisumękontrolnązapisanąwnagłówkuplikuwykonywalnegojako
unikatowyidentyfikator).
FirmaMicrosoftutrzymujeserwersymboliwsieciWeb,któryzapewniadostęp-
nośćpublicznychplikówsymboliWindows.PoprzezzainstalowanieDebuggingTools
forWindowsiskonfigurowanienarzędziSysinternals,abyużywałyserwerasymboli
Microsoft,możemyłatwosprawdzić,jakiefunkcjesystemuWindowswywoływane
przeznaszeprocesy
.
Rysunek2-9pokazujestoswywołańdlazdarzeniaprzechwyconegoprzyużyciu
ProcessMonitor.ObecnośćbibliotekiMSVBVM60.DLLnastosie(ramka15oraz17–21)
sygnalizuje,żejesttoprogramnapisanywjęzykuVisualBasic6,gdyżMSVBVM60.
DLLjestbibliotekąwykonawcząVisualBasic6.Wielkiewartościoffsetówdlaramek
MSVBVM60sugerują,żepliksymboliniejestdostępnydlategomodułu,zatempoka-
zywanenazwyniemusząbyć(izapewneniesą)rzeczywistyminazwamiwywoływa-
nychfunkcji.Ramka14pokazujewywołaniefunkcjinazwanejForm1::cmdCreate_Click
wgłównymplikuwykonywalnym(LuaBugs_VB6.exe).Ramkatapokazujerównież
ścieżkędoplikuźródłowego,cooznacza,żemamypełnąinformacjęsymbolicznądla
tegomodułu.FunkcjatanastępniewywołujeCWshShell::RegWritewmoduleWshom.
ocx(ramka13),sygnalizując,żetenprogramVisualBasic6używakontrolkiActiveX
WindowsScriptHost(WSH)dozapisywaniawrejestrze.CWshShell::RegWritewywo-
łujewewnętrznąfunkcjęwtymsamymmodule(ramka12),którawywołujeudo-
kumentowaneAPIRegCreateKeyExAsystemuWindowswbiblioteceKernel32.dll
(ramka11).WykonywanieprzechodziprzezfunkcjewewnętrzneKernel32(ramki