16/10/2020
Forestil dig at kunne stoppe verden, bare et øjeblik, for at kigge "under kølerhjelmen" på din computer og forstå præcis, hvad der foregår. For programmører og systemudviklere er denne "superkraft" ikke længere en drøm, men en realitet takket være værktøjer som SoftICE. Dette magiske stykke software, udviklet af Compuware/NuMega, har i årtier været betragtet som en af de mest kraftfulde debuggere på planeten. Selvom mange har hørt om det, har færre faktisk set det i aktion, og endnu færre har mestret dets komplekse, men utroligt effektive, grænseflade. Denne artikel vil introducere dig til SoftICE, forklare dets unikke egenskaber, guide dig gennem installation og grundlæggende brug, og give dig tips til at overvinde den stejle indlæringskurve.

Hvad Gør SoftICE Unikt?
I sin kerne er SoftICE en kernedebugger. Det betyder, at den opererer på et meget lavt niveau, direkte mellem operativsystemet og CPU'en. Når SoftICE er aktivt, stopper hele operativsystemet øjeblikkeligt. Denne enestående evne til at få fuld kontrol over operativsystemet giver SoftICE mulighed for at "jage" hvad som helst i hukommelsen og give dig detaljeret information om det. Den sande styrke ved SoftICE ligger i dens informative kommandoer, som gør det utroligt nemt at finde ud af, hvad der foregår i systemet.
SoftICE kan give dig et detaljeret indblik i Windows' interne mekanismer, herunder:
- Komplet information om tråde og processer.
- Detaljer om alle events, mutexes og semaforer.
- Information om alle objekthåndtag.
- Omfattende information om proces- og driverhukommelse.
- Alle Win32-heapinformationer.
- Strukturerede undtagelseshåndteringsrammer (SEH).
- DLL-eksporter.
Udover at være en kernedebugger fungerer SoftICE også som en almindelig debugger, der tilbyder fuld kilde- og symbolisk debugging, ligesom enhver grafisk debugger. Størstedelen af SoftICE-brugere anvender det til at debugge enhedsdrivere, hvor dets evne til at operere på kerneniveau er uundværlig. Men på grund af SoftICEs ekstreme kraft finder mange udviklere det også uvurderligt i tre nøglescenarier for udviklere i bruger-tilstand:
- Meget multi-trådede applikationer: Grafiske debuggere bruger systemressourcer sammen med den applikation, der debugges, hvilket kan forstyrre og maskere subtile timingproblemer. SoftICE kører uafhængigt og eliminerer denne interferens.
- Større multi-proces applikationer og NT-tjenester: Når du arbejder med komplekse systemer som kryds-proces COM-systemer, MTS og IIS-applikationer, der kan involvere mange processer, gør SoftICE det nemt at indlæse symboler for alle processer og sætte breakpoints, hvor det er nødvendigt. Det er en leg at single-steppe fra en klientapplikation til en serverapplikation via RPC-kanalen.
- Reverse Engineering: Hvis du har brug for at forstå, hvordan noget fungerer eller er implementeret, gør SoftICEs evne til at bryde på hvad som helst, hvor som helst, kombineret med dets omfattende informationskommandoer, det meget nemmere at afkode operativsystemet og applikationer.
Fordele og Ulemper ved SoftICE
Selvom SoftICE er et utroligt kraftfuldt værktøj, er det vigtigt at anerkende både dets styrker og svagheder. Her er en oversigt:
| Fordele | Ulemper |
|---|---|
| Uovertruffen Kraft: Kernel-niveau adgang giver fuld kontrol over systemet. | Pris: Ikke billig, ofte kun solgt som del af større pakker som DriverStudio. |
| Detaljeret Indsigt: Kan afsløre stort set alle detaljer om Windows' interne tilstand. | Stejl Indlæringskurve: Karakterbaseret brugergrænseflade kræver betydelig tidsinvestering at mestre. |
| Ideel til Driver-Debugging: Primært designet til enhedsdrivere. | Kommando-Drevet: Interaktion foregår primært via tekstkommandoer. |
| Effektiv i Komplekse Scenarier: Fremragende til multi-trådede/proces applikationer og reverse engineering. | Forudsætter Systemviden: Antager kendskab til systemprogrammering og Windows' indre virkemåde. |
| Stabil Brugerflade: Har bevaret en konsistent brugerflade fra DOS til Windows 2000. | OS-Afhængighed: Kan bryde med nye operativsystem-servicepakker, kræver opdateringer. |
Før Du Begynder: Installation og Forudsætninger
Inden du dykker ned i SoftICE, er der et par vigtige skridt og overvejelser, du skal gøre dig for at sikre en problemfri oplevelse. SoftICE er et lavniveausværktøj, der kræver intim viden om operativsystemet, hvilket betyder, at kompatibilitet kan være en udfordring.
Tjek for Opdateringer
Kontroller altid NuMegas hjemmeside for opdaterede versioner af SoftICE. Det er ikke ualmindeligt, at SoftICE "bryder" mellem operativsystemets servicepakkeniveauer. Hvis du opdaterer dit OS, skal du derfor tjekke, om SoftICE vil være kompatibelt. NuMega er typisk hurtige til at udgive opdaterede versioner, så snart betaversioner af operativsystemerne er tilgængelige.
Video Kort Support
Videosupport for SoftICE plejede at være en stor hovedpine for brugere. Heldigvis, med fremkomsten af DirectX, kan SoftICE nu fange videominder på en meget renere måde, så hvert videokort ikke kræver en specifik SoftICE-videodriver. Under installationen af SoftICE skal du vælge videotilstand. I "Display Adapter setup" skal du markere afkrydsningsfeltet "Universal Video Driver", indstille kortvalget til "Standard VGA" og trykke på "Test"-knappen. Hvis dit videokort understøtter den universelle videodriver, skulle du være i god stand. Selv hvis opsætningen af skærmadapteren ser ud til at fungere, er der mærkelige tilfælde, hvor SoftICE stadig ikke vises korrekt. Hvis det er tilfældet, skal du kontakte NuMegas tekniske support og prøve at bruge et andet videokort.
Læs Manualerne!
Før du nogensinde bruger SoftICE, tag dig en eftermiddag og læs manualerne! SoftICEs tekniske forfattere har gjort et fremragende stykke arbejde og inkluderet al slags fremragende råd om, hvordan man får mest muligt ud af dette meget komplicerede produkt. Et fremragende kapitel i "Using SoftICE"-manualen er Kapitel 11, "Exploring Windows NT", som introducerer dig til brugen af SoftICE til reverse engineering af nogle ting i Windows NT.
Installationstrin og Almindelige Fælder
Når du har downloadet SoftICE (potentielt en prøveversion), vil installationsprocessen præsentere dig for en konfigurationsdialog. Her kan du kontrollere forskellige muligheder for SoftICE. Som standard er "Manual"-indstillingen valgt, hvilket betyder, at du manuelt skal starte SoftICE, hver gang du har brug for det. Hvis du derimod vælger "Boot"-indstillingen, indlæses SoftICE før Windows, hvilket giver dig mulighed for at debugge enhedsdrivere fra start.
En kritisk del af konfigurationen er videosupport. Klik på "Video"-indstillingen og sørg for, at "Universal Video Driver" er valgt. Klik derefter på "Detect" for at registrere dit videokort og "Test" for at bekræfte, at alt fungerer. Hvis testene lykkes, vil en bekræftelsesmeddelelse blive vist. Efter at have gemt indstillingerne, skal du genstarte din computer.
Det er ikke ualmindeligt, at systemet fryser og viser en "blå skærm"-fejl, hvis SoftICE ikke er korrekt konfigureret, især i ældre Windows-versioner eller virtuelle maskiner. En almindelig løsning er at deaktivere DEP (Data Execution Prevention) ved at redigere din C:\boot.ini-konfigurationsfil og tilføje /noexecute=alwaysoff. Dette kan gøres ved at højreklikke på "Denne Computer", vælge "Egenskaber", gå til "Avanceret"-fanen og under "Opstart og Genoprettelse" trykke på "Indstillinger".
For brugere af virtuelle maskiner som VMware kan det også være nødvendigt at redigere .vmx-filen for den virtuelle maskine og tilføje følgende konfigurationsindstillinger for at forbedre stabiliteten af videosupport og musintegration:
svga.maxFullscreenRefreshTick = 5 vmmouse.present = "FALSE"
Disse trin hjælper med at sikre, at SoftICE kan starte og fungere korrekt, især i et virtuelt miljø.
Sådan Starter Du SoftICE
Når installationen er gennemført, og du har genstartet din computer, er SoftICE klar til brug. Den mest almindelige måde at starte SoftICE på er via "Start SoftICE"-genvejen, som ofte findes under "Alle programmer". Denne genvej er typisk et batchscript, der udfører kommandoen net start ntice. Dette afslører, at SoftICE er installeret som en systemtjeneste, som du skal starte, når du ønsker at bruge debuggeren.

Du kan også starte SoftICE-tjenesten direkte fra kommandoprompten med kommandoen:
net start ntice
Når tjenesten er startet med succes, kører SoftICE i baggrunden. For at vise SoftICE-debuggerens grænseflade skal du trykke på genvejstasten Ctrl-D. Hvis du trykker Ctrl-D igen, skjuler du SoftICE og får kontrol over dit operativsystem tilbage, hvilket indikerer, at SoftICE kører korrekt og kan aktiveres efter behov.
Kom Godt I Gang: Grundlæggende Brug
Når du har fået alt sat op, og du frit kan skifte ind og ud af SoftICE, er du klar til at investere den tid, det kræver at lære SoftICE. Før du forsøger at reverse-engineere operativsystemets loader fuldstændigt, bør du blot prøve at bruge SoftICE som en almindelig bruger-tilstand debugger i et par dage. Det vil give dig en idé om de grundlæggende operationer og hvordan man manipulerer ting i kilde-, data- og kommandovinduet. Du skal ikke bekymre dig om at blive for fancy; væn dig blot til de grundlæggende kommandoer, der er nødvendige for generel debugging. Hav "Command Reference"-manualen lige ved hånden, for du vil henvise til den en hel del.
Skærmposition og Skrifttyper
SoftICEs standard skærmposition er i øverste venstre hjørne af skærmen, hvilket ikke er det bedste sted, da du for det meste kigger på midten af skærmen. Den magiske tastekombination Ctrl+Alt+C vil automatisk centrere SoftICE-vinduet på skærmen. Hvis du vil flytte SoftICE-vinduet rundt, kan du bruge Ctrl+Alt+Piletasterne til at flytte i enhver retning, du ønsker.
SoftICE har også tre forskellige skrifttyper, nummereret et, to og tre, til din fornøjelse. Skrifttype 1 er den mindste, og skrifttype 3 er den største. Standard er skrifttype 1, og medmindre du kører ved en opløsning på 800x600, vil den sandsynligvis være for lille til at læse. Du kan bruge kommandoen set font # til at skifte mellem skrifttyperne. Mange finder skrifttype 2 mest læselig. To SoftICE-makroer, der er meget nyttige, er som følger:
MACRO BIG="set font 2;lines 52" MACRO SMALL="set font 1;lines 94"
Disse kan tilføjes til WINICE.DAT-filen (enten manuelt eller via LOADER32.EXE's SoftICE Initialization Settings dialog, Makro-fanen), så de altid er tilgængelige. Makroen BIG tvinger skrifttypen til den mellemstore version og øger antallet af linjer, der vises i vinduet. Afhængigt af din skærmopløsning kan du have brug for flere eller færre linjer. Makroen SMALL, som du kan gætte, formindsker skrifttypen og øger antallet af synlige linjer.
Musens Funktioner
Du vil hurtigt ønske at blive fortrolig med SoftICEs musesupport, da den er meget hjælpsom til at fremskynde din debugging. Først og fremmest vil et dobbeltklik på en kildelinje eller en adresse sætte et breakpoint på den linje. Et enkeltklik på en registerværdi i Register-vinduet eller en dataplacering i Data-vinduet giver dig mulighed for at redigere værdierne direkte. Højreklik vil åbne kontekstmenuen. Hvis du højreklikker på en gyldig adresse eller et symbol, vil højreklik også fremhæve den værdi.
En ting, der er lidt anderledes ved SoftICEs kontekstmenu, er, at den inkluderer "Copy & Paste"-kommandoen. Når du ønsker at tilføje parametre til normale kommandoer, kan "Copy & Paste"-kommandoen gøre din brug meget hurtigere. For eksempel, hvis du vil sætte et breakpoint på en funktion i kodevinduets disassemblering, skal du skrive BPX (bemærk mellemrummet!), højreklikke på funktionen og vælge "Copy & Paste" fra højreklik-kontekstmenuen. En anden virkelig cool kommando i højreklik-menuen er "What"-kommandoen. Hvis du nogensinde har ønsket at vide, hvad en værdi i et register, disassembleringen eller i Data-vinduet var, skal du højreklikke og vælge "What". SoftICE er ret god til at finde ud af de fleste elementer, så spørg bare løs!
Håndtering af Musproblemer
En af de største frustrationer med SoftICE er, når musen går amok. Hvis du tilfældigvis bevæger musen lige rigtigt, når SoftICE popper op på grund af en undtagelse eller et breakpoint, afbryder SoftICE musepakkerne midt i det hele, så musen kan være ude af synkronisering. Tricket er forsigtigt at trykke på musen, så højreklik-menuen vises. Når menuen vises, skal du trykke på Ctrl+M et par gange for at få musen tilbage i sporet.
Avancerede Tips og Kommandoer
Når du er blevet fortrolig med at debugge simple bruger-tilstand applikationer under SoftICE, vil du gerne begynde at grave lidt dybere ned i, hvad SoftICE kan gøre. I dette afsnit vil vi diskutere kommandoer og teknikker, der hjælper dig med at komme forbi nogle af de forvirrende dele.
Tilbage til Aktuel Instruktionspeger
Hvis du debugger som mange professionelle, vil du ofte kigge på forskellige ting og bevæge dig rundt i processen. Når du er kommet et par lag ned, kan det blive lidt forvirrende at finde ud af, hvor du startede. Du kan bruge enten kommandoen . (punktum) eller højreklikke på EIP i registervinduet og vælge "Unassemble" for at vende tilbage til den aktuelle instruktionspeger.
Ændring af Adressekontekst
Nogle gange handler halvdelen af at bruge SoftICE om at komme ind i den rigtige proces, før man udfører specifikke operationer. Da SoftICE er globalt, skal du nogle gange tvinge SoftICE til at skifte sine interne pegere, så enhver informationskommando, du vil udføre, gælder for en specificeret proces. Kommandoen ADDR giver dig mulighed for at se de kørende processer samt at tvinge SoftICE ind i en specifik adressekontekst. Du kan se, hvilken adressekontekst der er aktuel, ved at kigge på statuslinjen nederst til højre. Hvis du skriver ADDR alene, vil du se en liste over alle processer, hvor den aktuelle adressekontekst er angivet med en stjerne (*).
Breakpoints i SoftICE
Som med enhver moderne debugger understøtter SoftICE nogle utrolige breakpoint-muligheder. Det anbefales kraftigt, at du tager dig tid til at læse kapitlerne om Breakpoints og Udtryk i manualen, da de vil vise dig en del meget fede breakpoint-eksempler. Den vigtigste type breakpoint, SoftICE understøtter, er hukommelsesbreakpointet med kommandoen BPM. SoftICE er den eneste debugger, der er i stand til at debugge bruger-tilstand programmer og stoppe ved enhver adgang til et bestemt stykke hukommelse. Når vi siger "enhver adgang", mener vi enhver læsning, skrivning eller forsøgt udførelse. Denne kommando er uvurderlig til at opspore "vilde" skrivninger til uinitialiseret hukommelse. En anden breakpoint-kommando, der er meget nyttig i visse situationer, er BSTAT-kommandoen, som rapporterer al slags breakpoint-statistik. Endelig er et breakpoint-trick, mange bruger, BPX @ESP, som vil bryde på den funktion, der kalder den aktuelle funktion. På den måde kan du komme tilbage til den, der kaldte den aktuelle funktion, hvis du ønsker at sætte et breakpoint hos kalderen.

Unassemble Kommandoen (U)
Selvom du sandsynligvis er klar over, at U-kommandoen vil disassemblere adresser, vil unassemble-kommandoen også gøre det, hvor du har breakpoints sat, blot ved at sende BP# (hvor # er breakpointnummeret) som kommando. U-kommandoen vil også springe til en specifik linje i en kildefil, hvis .### (hvor ### er kildelinjen) er parameteren.
Minimering af Støj
Nogle gange kan SoftICE rapportere alt for meget information i kommandovinduet, når standard "verbose"-behandling er slået til. Generelt kan du slå den verbose-behandling fra med SET VERBOSE OFF, så den eneste udgang, du ser i kommandovinduet, er dine kald til OutputDebugString.
Ud af Uendelige Loops
SoftICE vil poppe op og rapportere eventuelle uhåndterede undtagelser på computeren. Lejlighedsvis vil SoftICE synes at komme ind i en uendelig løkke, hvor den aldrig giver undtagelsen videre til operativsystemet. Når det sker, skal du bruge FAULTS OFF for at fortælle SoftICE at slå sin fejlfangst fra. Når du er kommet forbi problemområdet, kan du poppe tilbage i SoftICE og udføre et FAULTS ON for at genoprette fejlfangsten.
Oversigt over Vigtige SoftICE-Kommandoer
Her er en hurtig reference til nogle af de mest almindelige og nyttige kommandoer i SoftICE:
| Kommando | Beskrivelse |
|---|---|
:help | Viser en liste over alle tilgængelige kommandoer. |
:help <kommando> | Giver detaljeret hjælp om en specifik kommando. |
:proc | Viser en liste over alle kørende processer, der kan debugges. |
:driver | Viser en liste over alle indlæste drivere, der kan debugges. |
:addr <procesnavn/PID> | Indtaster adresseområdet for en specifik proces. |
:d <adresse> | Viser værdierne på en given virtuel hukommelsesadresse (dump memory). |
:e <adresse> <værdi> | Redigerer værdien på en given virtuel hukommelsesadresse. |
:u <adresse> | Disassemblerer instruktioner på en given virtuel hukommelsesadresse. |
:a <adresse> <instruktion> | Samler instruktioner på en given virtuel hukommelsesadresse. |
:r | Viser/redigerer indholdet af CPU-registre. |
:S <data> | Søger efter data i hukommelsen. |
:bpx <adresse/symbol> | Sætter et breakpoint på udførelse. |
:bpm <adresse> <adgangstype> | Sætter et breakpoint på hukommelsesadgang (læsning, skrivning, udførelse). |
:bl | Viser alle aktuelt satte breakpoints. |
:bc <nummer> | Rydder et breakpoint. |
:t | Single-step en instruktion. |
:p | Udfører indtil return. |
:wr | Viser/skjuler registervinduet. |
:wd | Viser/skjuler datavinduet. |
:wc | Viser/skjuler kodevinduet. |
:map32 | Viser sektionerne af den aktuelle proces. |
Et Praktisk Eksempel med SoftICE
Lad os gennemgå et simpelt eksempel for at illustrere, hvordan du kan interagere med SoftICE og debugge en grundlæggende applikation. Når du aktiverer SoftICE (Ctrl-D), vil du se et vindue opdelt i flere paneler: øverst er CPU-registrene, derefter en disassembleringsliste og nederst kommandovinduet. I statuslinjen nederst kan du se den aktuelle proces, der debugges (f.eks. "Idle", hvis ingen specifik proces er valgt).
Først kan du indtaste kommandoen :proc for at se alle de processer, du kan debugge. Du vil bemærke, at der muligvis ikke er meget plads til at vise data. Du kan justere vinduesstørrelsen og layoutet med kommandoer som:
width 90 lines 80 ww 2 wd 15 wc 50
Disse kommandoer justerer den samlede bredde, antallet af linjer og størrelsen af de individuelle vinduer (ww for vinduesvinduet, wd for datavinduet, wc for kodevinduet). Hvis du derefter kører :proc igen, vil du se en mere organiseret liste over processerne, komplet med PID, tråde og status, hvilket kan verificeres mod Task Manager.
For at debugge en specifik proces skal du indtaste dens adresseområde. For eksempel, for at debugge Explorer-processen, ville du skrive :addr explorer. Du vil se "explorer" vises i statuslinjen, hvilket indikerer, at du nu debugger denne proces. Du kan derefter bruge :map32-kommandoen til at liste alle sektioner af Explorer-processen, såsom .text, .data, .rsrc og .reloc, med deres adresser, størrelser og adgangstilladelser.
Lad os nu sige, at du har et simpelt C++-program, der udskriver "Hello World!" til konsollen. Når programmet kører, kan du aktivere SoftICE. Du vil se programmets navn (f.eks. "hello") i statuslinjen med en stjerne (*), hvilket indikerer, at det er den aktuelle debuggede proces. Du kan bruge :map32 til at se programmets segmenter.
For at se, hvor EIP (Instruction Pointer) peger, kan du bruge kommandoen :u eip. Dette vil vise dig de assembly-instruktioner på den aktuelle eksekveringsposition. Hvis du ønsker at finde en specifik streng i dit program, for eksempel "Hello World!", kan du bruge søgekommandoen :S "Hello World!". SoftICE vil returnere hukommelsesadressen, hvor strengen blev fundet (f.eks. 0x0012C028). Du kan derefter dumpe hukommelsen på den adresse med :d 0012C028 for at bekræfte, at strengen er der.
Endelig kan du sætte et breakpoint på denne hukommelsesplacering ved hjælp af :bpm-kommandoen. For eksempel, :bpm 0x0012C028 r ville sætte et breakpoint, der udløses, når hukommelsen på den adresse læses. Du kan derefter bruge :bl til at liste alle aktive breakpoints. Dette breakpoint vil udløses, hver gang dit program forsøger at læse eller skrive til "Hello World!"-strengen, hvilket giver dig fuld kontrol over udførelsen.
Ofte Stillede Spørgsmål
- Er SoftICE gratis?
- Nej, SoftICE er ikke gratis. Det blev oprindeligt solgt som en del af NuMegas DriverStudio eller SoftICE Driver Suite, hvilket var pakker med flere udviklingsværktøjer. Det er et professionelt værktøj, og prisen afspejlede dets avancerede funktionalitet.
- Hvorfor er SoftICE så svært at bruge?
- SoftICE er svært at bruge af flere årsager. For det første har det en karakterbaseret (tekstbaseret) brugergrænseflade, der kræver, at du interagerer med kommandoer i stedet for grafiske elementer. For det andet opererer det på et meget lavt niveau og antager, at brugeren har en solid forståelse af systemprogrammering og Windows' interne virkemåde. Endelig er indlæringskurven stejl, da det kræver betydelig tidsinvestering at mestre alle kommandoer og koncepter.
- Kan SoftICE bruges til .NET/C# applikationer?
- SoftICE er primært en kernedebugger, men den kan bruges til at debugge bruger-tilstand applikationer, herunder dem skrevet i .NET eller C#. Dens styrke ligger i at observere systemkald, trådaktivitet og hukommelsesadgang på et lavt niveau, uanset programmeringssproget. Dog er den ikke en dedikeret .NET-debugger som Visual Studio, og den vil ikke give dig den samme høje grad af symbolisk information om .NET-specifikke konstruktioner. Den er mest nyttig til at forstå, hvordan .NET-applikationer interagerer med operativsystemet og hardwaren på et dybere plan.
- Hvad skal jeg gøre, hvis SoftICE fryser min computer?
- Hvis SoftICE fryser din computer (ofte resulterende i en blå skærm), skyldes det typisk et problem med konfigurationen, især videosupport eller DEP. Sørg for at have den nyeste version af SoftICE, der er kompatibel med dit operativsystem. Tjek dine videoindstillinger under installationen, og prøv at bruge "Universal Video Driver". Overvej at deaktivere DEP midlertidigt for at teste. I virtuelle maskiner kan yderligere VM-specifikke indstillinger være nødvendige. Hvis problemet fortsætter, er det bedst at konsultere NuMegas supportdokumentation eller professionelle fora for specifikke løsninger til din opsætning.
Konklusion
SoftICE er uden tvivl et af de mest kraftfulde fejlfindingsværktøjer, der nogensinde er skabt, især for dem, der arbejder med enhedsdrivere, operativsystem-interner eller komplekse multi-trådede/proces applikationer. Selvom dens karakterbaserede grænseflade og den stejle indlæringskurve kan virke skræmmende i starten, er den indsigt og kontrol, den giver, uovertruffen. Ved at følge de grundlæggende installations- og brugstips, læse manualerne og gradvist udforske dens kommandoer, kan du låse op for et hidtil uset niveau af forståelse for, hvad der virkelig foregår "under kølerhjelmen" på dit Windows-system. Mestring af SoftICE er en investering, der betaler sig, når du står over for de mest genstridige fejl og har brug for at se systemet indefra.
Hvis du vil læse andre artikler, der ligner SoftICE: Kernen af Fejlfinding på Windows, kan du besøge kategorien Iskrem.
