Polecenia SoftICE
.
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie Oknem
Definicja
Umieszcza bieżącą instrukcję w oknie Kodu
Składnia
.
Użycie
Kiedy okno Kodu jest widoczne, polecenie . (kropki) czyni widoczną instrukcję spod bieżącego
CS:EIP i podświetla ją.
Dla Windows 9x i rodziny Windows NT
Polecenie to przełącza kontekst z powrotem do pierwotnego kontekstu w jakim pojawił się SoftICE.
?
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Różne
Definicja
Określa wartość wyrażenia
Składnia
Dla Windows 3.1
? [polecenie | wyrażenie]
Dla Windows 9x i rodziny Windows NT
? wyrażenie
Użycie
Dla Windows 3.1
Pod Windows 3.1 parametr jaki wprowadzasz do polecenia ? określa czy jest wyświetlona pomoc
czy obliczane wyrażenie. Jeśli określisz polecenie. ? wyświetli szczegółową informację o tym
poleceniu, obejmującą składnię polecenia i przykład. Jeśli określisz wyrażenie, wyrażenie zostanie
obliczone a wynik wyświetlony w postaci szesnastkowej , dziesiętnej, dziesiętnej ze znakiem (tylko
jeśli < 0) i ASCII.
Dla Windows 9x i rodziny NT
Pod Windows 9x i rodziną Windows NT, polecenie ? tylko oblicza wyrażenia. Dla obliczenia
wyrażenia, wpisz polecenie > po którym następuje wyrażenie jakie chcesz obliczyć. SoftICE
wyświetla wynik w postaci szesnastkowej, dziesiętnej, dziesiętnej ze znakiem (tylko jeśli < 0) lub
ASCII
Przykład
Poniższe polecenie wyświetla szesnastkową, dziesiętną i ASCI reprezentację wartości z wyrażenia
10 * 4+3
? 10*4+3
00000043
0000000067
„C”
Zobacz też
H
A
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Różne
Definicja
Asemblacja kodu
Składnia
A [adres]
Użycie
Używa assemblera SoftICE do asemblacji instrukcji bezpośrednio do pamięci. Assembler obsługuje
standardowy zestaw instrukcji Intela 80x86. Jeśli nie określisz adresu, asemblacja wystąpi przy
ostatnim adresie gdzie instrukcja była asemblowana. Jeśli nie wprowadziłeś polecenia A wcześniej i
nie określiłeś tego adresu, użyty zostanie adres CS:EIP.
Polecenie A wprowadza interaktywny assembler SoftICE. Adres jest wyświetlany jako znak zachęty
dla każdej asemblowanej lini. Po wpisaniu instrukcji języka asemblera i naciśnięciu Enter, instrukcje
są assemblowane do pamięci pod określony adres. Wpisz instrukcje w standardowym formacie
Intela. Dla wyjścia z trybu assemblacji, naciśnij Enter pod wskazanym adresem.
Jeśli zakres adresu w jakim assemblujesz instrukcje jest widoczny w oknie Kodu , instrukcje
zmieniają się interaktywnie kiedy assemblujesz.
Assembler SoftICE obsługuje poniższy zbiór instrukcji:
*Dla Windows 3.1: 386, Zmienno przecinkowe
*Dla Windows 9x i rodziny NT: 386, 486, Pentium, Pentium Pro, , wszystkie odpowiadające
zbiorowi instrukcji koprocesora arytmetycznego, i zbioru instrukcji MMX
SoftICE również obsługuje następującą specjalną składnię
*Wprowadza USE16 lub USE32 w oddzielnej lini do późniejszego assemblowania instrukcji,
odpowiednio, jako 16 bitowych lub 32 bitowych. Jeśli nie określisz USE16 lub USE32, domyślnie
jest to to samo co tryb bieżącego rejestru CS
*Wprowadzanie mnemoników poleceń , po których następuje lista bajtów i / lub ciągi znaków
ujętych w znaki cudzysłowu oddzielone spacjami lub przecinkami.
*Używa mnemonika RETF do przedstawiania dalekich powrotów.
*Używa WORD PTR, BYTE PTR, DWORD PTR i FWORD PTR do określenia rozmiaru danej, jeśli
nie jest to argument rejestrowy
*MOV BYTE PTR ES:[1234.],1
*Używa FAR i NEAR dla jasnej assemblacji dalekich i bliskich skoków i wywołań. Jeśli nie
określisz inaczej, domyślnie jest NEAR
*Umieszcza operandy odnoszące się do komórek w nawiasach kwadratowych
*MOV AX, [1234]
Dla rodziny Windows NT
Dowolne zmiany jaką uczynisz w kodzie 32 bitowym są „trwałe”. To oznacza ,że pozostaną one na
miejscu nawet jeśli ładujesz lub przeładowujesz ten moduł jaki zmieniasz. Dla usunięcia zmian, zrób
jedno z następujących rzeczy: zrestartuj Windows NT, wypłukaj obraz pamięci z cache’a, lub
zmodyfikuj moduł.
Przykład
W poniższym przykładzie, instruujesz assembler o assemblacji instrukcji pod offsetem z bieżącego
segmentu kodu. Assembler zachęca cię do assemblacji instrukcji po wpisaniu polecenia. Wprowadź
wszystkie instrukcje i naciśnij pod adresem zachęty. Assembler assembluje instrukcje zaczynające się
pod offsetem 1234 wewnątrz bieżącego segmentu kodu
A CS : 1234
ACTION
OS
Windows 3.1
Typ
Sterowanie Trybem
Definicja
Ustawia działanie po osiągnięciu punktu przerwania
Składnia
ACTION [nmi | int1 | int3 |here | numer przerwania | nazwa debuggera]
nmi
Generuje przerwania nie-maskowalne po punkcie przerwania
int1
Generuje instrukcję INT1 po punkcie przerwania
int3
Generuje instrukcję INT3 po punkcie przerwania
here
Zwraca sterowanie do SoftICE po punkcie przerwania
numer przerwania
Poprawny numer przerwania między 0 a 5Fh
nazwa debuggera
Nazwa modułu aplikacji Windows debuggowanego który uzyskuje
sterowanie po punkcie przerwania SoftICE.
Użycie
Polecenie ACTION określa gdzie przekazać sterowanie kiedy wystąpią warunki punktu przerwania.
W większości przypadków, użyjesz ACTION do przekazania sterowania do debuggowanej aplikacji
jaką używasz w połączeniu z SoftICE. Użyj parametru HERE do powrotu do SoftICE, kiedy warunki
przerwania wystąpiły. Użyj parametrów NMI, INT1 i INT3 jako alternatyw dla aktywowania
debuggera DOS kiedy wstąpią warunki przerwania .Dla znalezienia nazwy modułu debuggera użyj
polecenia MOD
Jeśli określisz nazwę debuggera, INY0 wyzwoli debugger Windows. SoftICE zignoruje punkt
przerwania jaki spowoduje debugger Windows jeśli debugger uzyskuje dostęp do pamięci
pokrywanej przez komórkę pamięci lub zakres punktu przerwania. Kiedy SoftICE przekazuje
sterowanie do debuggera Windows z INT0, debugger Windows odpowiada jeśli wystąpi
przepełnienie dzielenia i wyświetli komunikat. Zignoruj ten komunikat ponieważ INT0 nie jest
powodowane przez rzeczywiste przepełnienie dzielenia.
Notka: Polecenie ACTION jest przestarzałe pod Windows 9x i rodziną Windows NT
Przykład
Kiedy używamy SoftICE z następującymi produktami, używajmy odpowiednich poleceń
Produkt
Polecenie SoftICE
CodeView for DOS
ACTION nmi
Notka: SoftICE generuje przerwanie nie-maskowalne
kiedy wystąpią warunki przerwania. Daje to sterowanie
CodeView for DOS
CodeView for Windows
ACTION cvw
Borland’s Turbo Debugger
ACTION tdw
for Windows
Multiscope’s Debugger for Windows
ACTION rtd
Zobacz
Ustawianie punktów przerwań w Using SoftICE
ADDR
OS
Windows 9x
Typ
Informacja Systemowa
Definicja
Wyświetla lub przełącza kontekst adresu
Składnia
ADDR [uchwyt kontekstu | nazwa procesu]
uchwyt kontekstu
Uchwyt kontekst adresu
nazwa procesu
Nazwa procesu
Użycie
Aby móc zobaczyć prywatną przestrzeń adresową dla procesu aplikacji, ustaw bieżący kontekst
adresu wewnątrz SoftICE tej aplikacji przez dostarczenie uchwytu kontekstu adresu lub nazwy
procesu jako pierwszego parametru polecenia ADDR. Dla zobaczenia informacji na wszystkich
aktualnie aktywnych kontekstach, użyj ADDR bez parametrów. Pierwszy kontekst adresu
wylistowany jest bieżącym kontekstem adresu.
Dla każdego kontekstu adresu , SoftICE wskazuje poniższe informacje:
*uchwyt kontekstu adresu
*adres tablicy wejść prywatnej tablicy stron (PGTPTR) kontekstu
*liczbę wejść, które są poprawne w tablicy PGTPTR
*początkowy i końcowy adres liniowy przedstawiany przez kontekst
*adres obiektów wzajemnie wykluczających się używanych do sterowania dostępem do tablicy stron
kontekstu
*nazwę procesu, który jest właścicielem kontekstu
Kiedy używasz plecenia ADDR z parametrem kontekstu adresu, SoftICE przełącza konteksty adresu
w ten sam sposób jak Windows. Kiedy przełączamy konteksty adresu, Windows 9x kopiuje wszystkie
wejścia w nowej tablicy PGTPTR kontekstu do katalogu stron (wskazywanego przez rejestr CR3).
Przełączanie kontekstu wpływa na adresowanie niższych 2GB pamięci od adresu liniowego 0 do
7FFFFFFFh. Każde wejście w tablicy PGTPTR jest wejściem katalogu stron które wskazuje tablicę
stron, która reprezentuje 4MB pamięci. Może być maksymalnie 512 wejść w tablicy PGTPTR
przedstawiającej pełne 2GB. Jeśli jest mniej niż 512 wejść w tablicy, reszta wejść w katalogu stron
jest ustawiona niepoprawnymi wartościami. Kiedy uruchamiamy więcej niż jedną instancję aplikacji,
ta sama nazwa właściciela pojawia się na liście kontekstu adresu więcej niż raz. Jeśli określisz nazwę
właściciela jako parametr, SoftICE zawsze wybierze pierwszy kontekst adresu z dopasowaną nazwą z
listy. Przełączenie do kontekstu adresu drugiej lub trzeciej instancji aplikacji dostarcza uchwytu
kontekstu adresu do polecenia ADDR.
Notka: Jeśli SoftICE pojawia się kiedy System VM (VM1) nie jest bieżącym VM, możliwe jest dla
informacji kontekstu właściciela pozostanie poza stronicowaniem i bycie niedostępnym.
Dane wyjściowe Dla każdego kontekstu lub procesu, wyświetlane są następujące informacje
Handle
Adres bloku kontrolnego kontekstu. Jest to uchwyt który jest przekazany w
wywołaniu VxD, które wymaga uchwytu kontekstu.
Pgtptr
Adres tablicy adresów tablicy stron. Każde wejście w tablicy przedstawia
wskaźnik tablicy stron. Kiedy przełącza się kontekst adresu, właściwa
komórka odbiera kopię tej tablicy.
Tables
Liczba wejść w tablicy PGTPTR. Nie wszystkie wejścia zawierają
poprawne wejścia katalogu stron. Jest to tylko liczba wejść
zarezerwowanych
MinAddr
Minimalny adres liniowy kontekstu adresu
MaxAddr
Maksymalny adres kontekstu adresu
Mutex
Uchwyt wzajemnego wykluczenia używany kiedy VMM manipuluje
tablicami stron dla kontekstu
Owner
Nazwa pierwszego procesu który używa tego kontekstu adresu
Przykład
Poniższe polecenia wyświetlają wszystkie aktualnie aktywne konteksty adresów. Kontekst w górnej ,
wyświetlanej lini jest kontekstem w którym pojawił się SoftICE. Do przełączenia ponownego to tego,
w dowolnym czasie użyj polecenia . (kropki). Kiedy wyświetlamy informacje wszystkich kontekstów,
jedna linia jest podświetlona, wskazując bieżący kontekst wewnątrz SoftICE. Kiedy wyświetlamy
daną lub deasemblowany kod, podświetlony kontekst jest jedynym jaki zobaczysz
ADDR
Handle
PGTPTR
Tables
MinAddr
MaxAddr
Mutex
Owner
C1068D00
C106CD0C
0200
00400000
7FFFF000
C0FEC770
WINWORD
C104E214
C1068068
0200
00400000
7FFFF000
C1063DBC
Rundll32
C105AC9C
C0FE5330
0002
00400000
7FFFF000
C0FE5900
QUICKERS
C1055EF8
C105CE8C
0200
00400000
7FFFF000
C105C5EC
Ibserver
C1056D10
C10571D4
0200
00400000
7FFFF000
C1056D44
Mprexe
C10D900
C10D9024
0002
00400000
7FFFF000
C10D9050
C10493E8
C10555FC
0004
00400000
7FFFF000
C0FE6460
KERNEL32
C1055808
C105650C
0200
00400000
7FFFF000
C105583C
MSGSRV32
C10593CC
C1059B78
0200
00400000
7FFFF000
C105908C
Explorer
C106AE70
C106DD10
0200
00400000
7FFFF000
C10586F0
Exchng32
C106ABC4
C106ED04
0200
00400000
7FFFF000
C106CA4C
Mapisp32
Bieżący kontekst jest pogrubiony (podświetlony)
Zobacz
Dla rodziny Windows NT, odnieś się do poniższego ADDR
ADDR
OS
Rodzina Windows NT
Typ
Informacja Systemowa
Definicja
Wyświetla lub przełącza kontekst adresu
Składnia
ADDR [nazwa procesu | id procesu | KPEB]
nazwa procesu
nazwa dowolnego bieżącego załadowanego procesu
id procesu
ID procesu. Każdy proces ma unikalny ID
KPEB
Adres liniowy Środowiskowego Bloku Procesu Jądra
Użycie
Użyj polecenia ADDR dla wyświetlenia i zmiany kontekstów adresu wewnątrz SoftICE aby dane i
kod określonego procesu mogły być widoczne. Używając ADDR bez parametrów wyświetlamy listę
wszystkich kontekstów adresów. Jeśli określisz parametr, SoftICE przełączy do kontekstu adresu
należącego do procesu o tej nazwie, identyfikator lub adresu bloku kontrolnego procesu. Jeśli
przełączyłeś kontekst adresu który zawiera Tablicę Lokalnych Deskryptorów (LDT), SoftICE ustawi
LDT z poprawną bazą i ograniczeniem. Wszystkie polecenia , które używają LDT działają tylko
kiedy bieżący kontekst SoftICE zawiera LDT. LDT’y nie są nigdy globalne pod Windows NT.W
warunkach pamięci konwencjonalnej, rodzina Windows NT zaczyna przenoszenie danych na dysk,
obejmując nieaktywne procesy, część katalogu stron i tablicę stron. Kiedy to nastąpi, SoftICE może
nie móc uzyskać koniecznych informacji do przełączenia kontekstów które polegają na tych
informacjach. SoftICE wskazuje to poprzez wyświetlenie komunikatu swapped w polu CR3 procesu
lub wyświetla komunikat błędu jeśli następuje próba przełączenia do kontekstu tego procesu. Kiedy
wyświetlamy informacje o wszystkich kontekstach, jedna linia jest podświetlona, wskazując bieżący
kontekst wewnątrz SoftICE. Kiedy wyświetlamy dane lub zdeasemblowany kod, podświetlony
kontekst jest jedynym jaki zobaczysz.
* (gwiazdka) poprzedzająca jedną wyświetlaną linię, wskazuje proces, który był aktywny kiedy
pojawił się SoftICE. Użyj polecenia . (kropki) do przełączenia z powrotem kontekstów do tego
kontekstu w dowolnym czasie.
Dane wyjściowe Dla każdego kontekstu lub procesu, ADDR pokazuje następujące informacje
CR3
Adres fizyczny katalogu stron, który jest umieszczony w rejestrze CR3
w związku z przełączeniem procesu do procesu
LDT
Jeśli proces ma LDT, pole to ma podstawowy liniowy adres LDT i pole
ograniczenia dla selektora LDT. Wszystkie procesy rodziny Windows NT
które mają LDT używają takiego samego selektora. Przy przełączaniu
procesu, rodzina Windows NT ustawia pola bazowe i ograniczenia na ten
selektor.
KPEB
Adres liniowy Środowiska Bloku Procesu Jądra dla tego procesu
PID
ID procesu. Każdy proces ma unikalny ID
NAME
Nazwa procesu
Przykład
Poniższy przykład pokazuje polecenie ADDR będącym użytym bez parametrów do wyświetlenia
wszystkich istniejących kontekstów
ADDR
CR3
LDT Base : Limit
KPEB
PID
NAME
00030000
FD8EA920
0002
System
01B69000
FD8BADE0
001B
winlogon
01CF3000
FD8B6B40
0027
services
01D37000
FD8B5760
0029
lsass
00FFA000
FD8A8AE0
0040
spoolss
009A5000
FD89F7E0
002B
nddeagent
00AA5000
FD89CB40
004A
progman
006D2000
E115F000:FFEF
FD899DE0
0054
ntvdm
00837000
FD896D80
0059
CLOCK
00387000
FD89E5E0
004E
4NT
*0121C000
E1172000:0187
FD88CCA0
0037
ntvdm
00030000
8013dd50
0000
Idle
Zobacz
Dla Windows 9x, patrz na polecenie ADDR powyżej
PROC
ALTKEY
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Ustawia alternatywną sekwencję klawiszy dla wywołania SoftICE
Składnia
ALTKEY [Alt litera | Ctrl litera]
litera
Dowolna litera (od A do Z)
Użycie
Użyj polecenia ALTKEY do zmiany sekwencji klawiszy (domyślnie Ctrl –D) dla pojawiania się
SoftICE. Sporadycznie inne programy mogą wchodzić w konflikt z tą domyślną sekwencją klawiszy.
Możesz zmienić sekwencję klawiszy do następujących sekwencji:
Ctrl + litera
lub
Alt + litera
Jeśli nie określisz parametru, wyświetlana będzie domyślna sekwencja skrótu klawiaturowego Aby
zmieniać sekwencję skrótu klawiaturowego za każdym razem kiedy uruchamia się SoftICE,
skonfiguruj SoftICE w SoftICE Loaderze umieszczając polecenie ALTKEY w ciągu inicjalizującym
SoftICE
Przykład
Aby określić, że sekwencja klawiszy Alt + Z spowoduje pojawienie się ekranu SoftICE, użyj
następującego polecenia
ALTKEY alt z
ALTSCR
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie Oknami
Definicja
Wyświetla SoftICE na alternatywnym ekranie
Składnia
ALTSCR [mono | vga | off]
mono
Przekierowuje dane wyjściowe SoftICE do alternatywnego monochromatycznego
monitora używającego karty monochromatycznej kompatybilnej z Herculesem.
Tryb ten wyświetla 43 linie tekstu zamiast 25 lini wyświetlanych w trybie
tekstowym
vga
Przekierowuje dane wyjściowe SoftICE do alternatywnego monitora używającego
standardowego trybu VGA
Użycie
Użyj polecenia ALTSCR do przekierowania danych wyjściowych SoftICE z ekranu domyślnego na
alternatywny monitor monochromatyczny lub VGA. ALTSCR wymaga aby system miał dwa
powiązane ze sobą monitory .Monitor alternatywny powinien być albo monitorem
monochromatycznym w trybie znakowym (tryb domyślny), lub kartę VGA. Domyślnym ustawieniem
jest ALTSCR OFF.
Notka: Aby zmienić ekran wyświetlania SoftICE za każdym uruchamianiem SoftICE, umieść
polecenie ALTSCR w ciągu inicjalizującym wewnątrz ustawień konfiguracyjnych SoftICE.
W grupie programowej SoftICE, użyj Ustawień Wyświetlania Karty dla wybrania monitora
monochromatycznego .SoftICE automatycznie startuje w trybie monochromatycznym czyniąc
polecenie ALTSCR niekoniecznym. Również, użyj tego ustawienia jeśli doświadczyłeś problemów z
video nawet kiedy w ciągu inicjalizującym jest ALTSCR ON.
Notka: Użytkownicy ALTSCR VGA
Jeśli używasz alternatywnego ekranu w trybie VGA musisz zablokować VGA na karcie graficznej,
która będzie używała ekranu Windows. Nie możesz użyć dwóch kart, które są w trybie VGA w tym
samy czasie. Sprawdź w dokumentacji swojej karty graficznej aby znaleźć właściwy slot PCI
Dla Windows 9x
Możesz również zastartować WINICE z parametrem /M do obejścia początkowego oprogramowania
VGA i wymuszenia na SoftICE alternatywnego monitora monochromatycznego. Jest to użyteczne
jeśli twoja karta video doświadczyła konfliktów z początkowym oprogramowaniem.
Przykład
Poniższe polecenie przekierowuje dane z ekranu do alternatywnego monitora w standardzie VGA
ALTSCR vga
ANSWER
OS
Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Auto odpowiedź i przekierowanie konsoli do modemu
Składnia
ANSWER =[on [port com] [szybkość transmisji] [i = inicj,]| off]
port com
Jeśli nie jest określony żaden port com, użyty jest COM1
szybkość transmisji
Szybkość transmisji używana dla komunikacji modemowej. Domyślnie
jest to 38400. Szybkości mogą obejmować 1200, 2400, 4800, 9600, 19200
23040, 28800,38400, 57600 i 115200
i =inicj.
Opcjonalny ciąg inicjalizujący modem
Użycie
Polecenie ANSWER pozwala SoftICE odpowiedzieć na przychodzące wywołania i przekierowywać
wszystkie dane do połączonego PC z uruchomionym programem SERIAL.EXE w trybie wybierania.
Po wykonaniu polecenia , SoftICE listuje przychodzące wywołania na określonym porcie com
podczas gdy maszyna kontynuuje normalne działanie. Połączenia przychodzące są generowane przez
program SERIAL.EXE na maszynie zdalnej.
Możesz umieścić domyślny ciąg inicjalizacyjny ANSWER w ustawieniach konfiguracyjnych
SoftICE. Kiedy SoftICE wykrywa wywołanie wykonane po wpisaniu poleceniu ANSWER , pojawia
się i wskazuje ,że jest wykonane połączenie ze zdalną maszyną, potem znika. Maszyna lokalna, w
efekcie pozostaje zawieszona podczas zdalnego połączenia. Polecenie ANSWER może być
anulowane w dowolnym czasie z ANSWER OFF. Zatrzyma to SoftICE przed wylistowaniem
wywołań przychodzących.
Przykład
Poniższej mamy przykład polecenia ANSWER. Najpierw SoftICE inicjalizuje modem na porcie com
2 z ciągiem „atx0” a potem zawraca sterowanie do lini poleceń. Z tego miejsca odpowiada na
wywołania czynione przez modem i próbuje połączyć się z szybkością 38400 bps.
ANSWER on 2 38400 i = atx0
Poniżej mamy przykład domyślnego ciągu inicjalizującego instrukcji ANSWER w ustawieniach
konfiguracyjnych SoftICE. Z tą instrukcją , SoftICE zawsze zainicjalizuje modem określonym w
poleceniu ANSWER ‘atx0”, chyba ,że polecenie ANSWER wyraźnie określi ciąg inicjalizujący.
ANSWER = atx0
Zobacz
SERIAL
APC
OS
Rodzina Windows NT
Typ
Informacja Systemowa
Definicja
Wyświetla Asynchroniczne Wywołanie Procedury (APC)
Składnia
APC [adres | TID | PID]
adres
Lokacja asynchronicznego wywołania procedury
TID
ID wątku jaki chcesz przeszukać dla asynchronicznego wywołania
procedury
PID
ID procesu jaki chcesz przeszukać dla asynchronicznego wywołania
procedury
Użycie
Polecenie APC wyświetla informacje o asynchronicznych wywołaniach procedury, jakie są aktualnie
w systemie. Jeśli wpiszesz APC bez parametrów, SoftICE wylistuje wszystkie asynchroniczne
wywołania procedury oczekujące na dostarczenie w aktualnie uruchomionym wątku. Lub możesz
poinstruować SoftICE aby przeszedł przez określony wątek lub proces.
Przykład
Poniższy przykład wyświetla informacje o asynchronicznym wywołaniu procedury
APC
APC Object
at
806D716C
PKTHREAD 806D716C
APC Queue Flink806E1614 Blink 806E1614
Routines:
Kernel 801A3B5Entoskrnl!NtVdmControl + 130E
Rundown 801A44Dantoskrnl!NtVdmControl + 1C8A
Normal 801A3CFAntoskrnl!NtVdmControl + 14AA
Normal Context 00000000
Argument1 00000000Argument2 00000000
ApcStateIndex 0
ApcMode KernelMode
In APC Queue
User mode APC Queue Empty
Zobacz
DPC
ATTACH
OS
Rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Definiuje środowisko użytkowe, jakie będzie tworzone za każdym razem kiedy pojawia się SoftICE
Składnia
ATTACH [opcjonalnie modyfikator polecenia][idxnum] nazwa kontekstu adresu [nazwa tablicy]
(tylko polecenie)
Wyświetla listę zdefiniowanych środowisk użytkowych
opcjonalnie modyfikator
polecenia
(Zobacz poniższą listę „Opcjonalne Modyfikatory Poleceń”)
idxnum
Idxnum jest wejściem na listę dołączonych definicji. To czyni powiązaną
definicję idxnum bieżącym aktywnym środowiskiem użytkowym.
Notka: Jeśli numer indeksu jest określony razem z nazwą kontekstu
Adresu i / lub nazwą tablicy, wtedy poprzednio zdefiniowane wejście
będzie nadpisane.
nazwa kontekstu adresu Określa nazwę kontekstu adresu dla automatycznego przełączania.
Notka: Kontekst adresu nie istnieje. Jest również możliwe wpisanie nazwy
która nigdy nie będzie istniała. Poprzez zrobienie tego, użyjemy cechy
polecenia ATTACH nazwa tablicy.
nazwa tablicy
Określa nazwę tablicy dla autoprzełączenia na pojawienie się.
Notka: Nazwa tablicy nie musi istnieć. Jeśli nie można jej znaleźć, będzie
Wykonany mechanizm SoftICE zwykłej automatycznej selekcji tablic.
Opcjonalne Modyfikatory Polecenia
Poniższe opcjonalne modyfikatory polecenia są używane z poleceniem ATTACH:
„.detach” – Rozłącza zdefiniowane środowisko użytkowe i pozwala na automatyczne przełączanie.
Alias dla polecenia detach
„.list” – Pokazuje listę definicji „attach”
„..delete” – Usuwa wejście z listy „attach”
„.clear” – Usuwa wejścia z listy „attach”
„.set idxnum” –Zmienia aktywne środowisko użytkowe na to zdefiniowane przez idxnum. Alias da
polecenia „attach idxnum”
„.create” - tworzy nowe wejście w zdefiniowanej tablicy „attach”
Użycie
Kiedy pojawia się SoftICE, automatycznie lokuje aktywny kontekst adresu i tę tablicę która jest
odpowiednia dla tego kontekstu adresu.. Potem automatycznie zmienia ten kontekst i tablicę. W
wielu sytuacjach, jest to zachowanie pożądane. Chociaż są instancje dla których jest to przeszkoda.
Mianowicie ,kiedy debuggujemy aplikację trybu użytkownika lub kiedy jest wywołanych wiele
tablic a ty jesteś zainteresowany tylko jedną tablicą. Na przykład podczas debuggowania programu
gdidemo, możesz zdiagnozować problem w wywołaniu do ntdll. W tym przypadku chciałbyś mieć
załadowane symbole ntdll. Jednakże, domyślnie, SoftICE automatycznie przełącza do tablicy
gdidemo przy pojawieniu się. Jeśli użyjesz cechy „dołączenia SoftICE do środowiska użytkowego”,
możesz przesłonić to zachowanie.
Notka: Czasami jest pożądane jest posiadanie funkcjonalności dołączania tylko do zmiany kontekstu
adresu lub tablicy. Można tego dokonać przez dostarczenie nazwy wypełniającej w nazwie kontekstu
adresowego i / lub parametrów nazwy tablicy.
Nie jest konieczne dla określonego kontekstu adresu lub tablicy rezydowanie w pamięci w czasie
kiedy rekord jest tworzony lub używany. Jeśli jest dostępny, przełączenie nastąpi do zdefiniowanego
adresu / tablicy. W przeciwnym razie SoftICE wróci do automatycznej selekcji.
Przykład
Pierwszy przykład dodaje gdidemo do tablicy gdidemo. * wskazuje ,że jest to aktywne środowisko
użytkowe
: attach gdidemo ntdll
: attach
Idx
Nazwa Kontekstu
Nazwa Tablicy
*0
gdidemo
gdidemo
Kolejne dwa przykłady dodają dwa więcej wejścia .Zauważ ,że kiedy tworzysz wejście, to wejście
staje się aktywnym środowiskiem
: attach.create csrrs ntoskrnl
: attach.list
Idx
Nazwa Kontekstu
Nazwa Tablicy
0
gdidemo
gdidemo
*1
csrss
ntoskrnl
Ten przykład tworzy wejście z kontekstem adresu, junkname’, który nie istnieje. Zadaniem tego
wejścia jest powodowanie aby SoftICE zawsze wybierał tablicę ‘ntdll’ przy pojawianiu się
: attach.create csrss ntoskrnl
: attach.list
Idx
Nazwa Kontekstu
Nazwa Tablicy
0
gdidemo
gdidemo
1
csrss
ntoskrnl
*2
junkname
ntdll
Ten przykład pokazuje jak zamienić wejścia w tablicy. Wyszczególnia numer indeksu a potem nowy
kontekst adresu nazwy / nazwy tablicy
: attach 0 gdidemo user32
: attach
Idx
Nazwa Kontekstu
Nazwa Tablicy
0
gdidemo
user32
1
csrss
ntoskrnl
*2
junkname
ntdll
BC
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktami przerwań
Definicja
Czyści jeden lub więcej punktów przerwań
Składnia
BC lista | *
lista
Szereg indeksów punktów przerwań oddzielonych przecinkami lub spacjami
*
Czyści wszystkie punkty przerwań
Przykład
Dla wyczyszczenia wszystkich punktów przerwań użyj polecenia:
BC *
Dla wyczyszczenia punktów przerwań 1 i 5, użyj następującego polecenia:
BC 1 5
Jeśli użyjesz polecenia BL (lista punktów przerwań), lista punktów przerwań będzie pusta dopóki nie
zdefiniujesz więcej punktów przerwań
BD
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktami przerwań
Definicja
Wyłącza jeden lub więcej punktów przerwań
Składnia
BD lista | *
lista
Szereg indeksów punktów przerwań oddzielonych przecinkami lub spacjami
*
Wyłącza wszystkie punkty przerwań
Użycie
Użyj polecenia BD do czasowego wyłączenia punktów przerwań. Reaktywacja punktów przerwań
następuje poleceniem BE (włącz punkty przerwań)
Aby dowiedzieć się który punkt przerwania jest wyłączony, wylistuj punkty przerwań poleceniem
BL. Punkt przerwania który jest wyłączony ma gwiazdkę (*) po indeksie punktu przerwania.
Przykład
Aby wyłączyć punkty przerwania 1 i 3 użyj polecenia
BD 1 3
BE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktami przerwań
Definicja
Włącza jeden lub więcej punktów przerwań
Składnia
BE lista | *
lista
Szereg indeksów punktów przerwań oddzielonych przecinkami lub spacjami
*
Włącza wszystkie punkty przerwań
Użycie
Użyj polecenia BE dla reaktywacji punktów przerwań, które dezaktywowałeś poleceniem BD
(wyłącz punkt przerwania)
Notka: Automatycznie włączysz punkt przerwania kiedy najpierw zdefiniujesz go lub wyedytujesz.
Przykład
Aby włączyć punkt przerwania 3 użyj polecenia
BE 3
BH
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktami przerwań
Definicja
Listuje i wybiera poprzedni zbiór punktów przerwań z historii punktów przerwań
Składnia
BH
Użycie
Użyj polecenia BH do ponownego wywołania punktów przerwań, które ustawiłeś zarówno w bieżącej
jak i poprzedniej sesji SoftICE. Wszystkie zachowane punkty przerwań są wyświetlane w oknie
Poleceń i mogą być wybrane przy użyciu następujących klawiszy:
Strzałka w Górę
Pozycjonuje kursor jedną linię w górę. Jeśli kursor jest na szczycie lini w
oknie Poleceń, lista jest przewijana.
Strzałka w Dół
Pozycjonuje kursor jedną linię w dół,. Jeśli kursor jest na dole lini w oknie
Poleceń, lista jest przewijana
Insert
Zaznacza punkt przerwani z bieżącej lii kursora, lub odznacza go jeśli był
już zaznaczony
Enter
Ustawia wszystkie zaznaczone punkty przerwań
Esc
Opuszczanie historii punktów przerwań bez zapisywania punktów
przerwań
SoftICE zachowuje ostatnie 32 punkty przerwań
Dla Windows 3.1 i Windows 9x
Za każdym razem kiedy Windows zamyka się normalnie, te punkty przerwań są zapisane do pliku
WINICE.BRK w tym samym katalogu co WINICE.EXE. Kiedy SoftICE jest ładowany, odczytuje
historię punktów przerwań z pliku WINICE.BRK
Dla Windows 9x
Jeśli skonfigurowałeś Windows 9x aby ładował SoftICE przed WIN.COM przez dołączenie
\siw95\winice.exe na końcu AUTOEXEC.BAT, musisz również ustawić opcję BootGUI w
MSDOS.SYS na BootGUI = 0. Jeśli ta opcja jest ustawiona na BootGUI = 1, Windows 9x nie zwróci
sterowania do SoftICE kiedy się zamyka, a SoftICE nie zapisze pliku historii punktów przerwań.
Dla rodziny Windows NT
Punkty przerwań są zapisywane do pliku WINICE.BRK w katalogu
\SYSTEMROOT\SYSTEM32\DRIVERS.
Przykład
Aby wybrać dowolny z ostatnich 32 punktów przerwań z bieżącego i poprzedniej sesji SoftICE, użyj
polecenia
BH
BL
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktami przerwań
Definicja
Listuje wszystkie punkty przerwań
Składnia
BL
Użycie
Polecenie BL wyświetla wszystkie punkty przerwań, które są aktualnie ustawione. Dla każdego
punktu przerwania, BL listuje indeks punktu przerwania, typ punktu przerwania, stan punktu
przerwania i wszelkie warunki i działania punktu przerwania. Stanem punktu przerwania jest albo
włączenie albo wyłączenie. Jeśli wyłączasz punkt przerwania, pojawi się * (gwiazdka) po indeksie
punktu przerwania. Jeśli SoftICE jest aktywny ze względu na punkt przerwania , ten punkt
przerwania jest podświetlony.
Polecenie BL nie ma parametrów
Przykład
Dla wyświetlenia wszystkich punktów przerwań, które zdefiniowano, użyj następującego polecenia
BL
*Dla Windows 3.1
0
BPMB #30 : 123400 W EQ 0010 DR3 C=03
1*
BPR #30 : 80022800 #30 : 80022FFF W C=01
2
BPIO 0021 W NE 00FF C=01
3
BPINT 21 AH = 3D C=01
Notka: Punkt przerwania 1 ma gwiazdkę (*) po nim następującą, pokazując ,że był wyłączony
Dla Windows 9x i rodziny Windows NT
00)
BPX #8: 80102A4B
IF (EAX==1) DO „DO ESI”
01) *
BPX _LockWindowsInfo
02)
BPMD #013F : 0063F8A0 RW DR3
03)
BPINT 2E IF (EAX==0x1E)
BMSG
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania na jednym lub więcej komunikacie Windows
Składnia
Dla Windows 3.1
BMSG uchwyt okna [L] [początek komunikatu [koniec komunikatu]][c =count]
Dla Windows 9x i rodziny Windows NT
BMSG uchwyt okna [L} [początek komunikatu [koniec komunikatu]] [IF wyrażenie [DO
„polecenie1; poleenie2;...]]
uchwyt okna
Wartość HWND zwracana z CraeteWindow lub CreateWindowEX
L
Logi komunikatów do okna Poleceń SoftICE
początek komunikatu
Pojedynczy komunikat lub niższy numer komunikatu w zakresie
komunikatów Windows. Jeśli nie określisz zakresu końcem komunikatu,
tylko początkiem, spowoduje to przerwanie
Notka: Zarówno dla początku jaki końca komunikatu, numery komunikatu
mogą być określone albo szesnastkowo albo przez użycie aktualnych nazw
ASCII komunikatów, na przykład WM_QUIT
koniec komunikatu
Wyższy numer komunikatu w zakresie komunikatów Windows
c=
licznik wyzwoleń punktów przerwań
IF wyrażenie
Wyrażenie warunkowe: wyrażenie musi wyliczyć TRUE (nie zero) dla
wyzwolenia punktu przerwania
DO polecenie
Działanie punktu przerwania: Szereg poleceń SoftICE mogących się
wykonać kiedy jest wyzwolony punkt przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i
kontroli punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów
przerwań.
Użycie
Polecenie BMSG jest używane do ustawiania punktów przerwań na sterownikach komunikatów
okien, które będą wyzwolone kiedy odbiorą komunikat, który albo dopasuje określony typ
komunikatu, lub podlega wskazaniu zakresu typu komunikatów
*Jeśli nie określisz zakresu komunikatu, punkt przerwania zastosuje się do WSZYSTKICH
komunikatów Windows
*Jeśli określisz parametr L, SoftICE loguje te komunikaty do okna Poleceń zamiast pojawienia się
kiedy wystąpi komunikat
Kiedy SoftICE pojawi się na punkcie przerwania BMSG, wskaźnik instrukcji (CS:[E]IP) jest
ustawiony na pierwszą instrukcję procedury obsługi komunikatu. Kiedy SoftICE przerywa, bieżący
wyświetlany komunikat jest w następującej postaci:
hWnd = xxxx wParam=xxxx lParam=xxxxxxxx msg =xxxx nazwa komunikatu
Notka: Parametry są przekazywane, które są przekazywane do procedury komunikatu. Wszystkie
liczby są szesnastkowe. Nazwa komunikatu jest zdefiniowaną nazwą Windows dla tego komunikatu.
Dla wyświetlenia poprawnego komunikatu Windows, wpisz polecenie BMSG bez parametrów. Dla
uzyskania poprawnego uchwytu okna, użyj polecenia HWND. Możesz ustawić wiele punktów
przerwań BMSG na jednym uchwycie okna, ale zakresy komunikatów dla tych punktów przerwań
mogą na siebie zachodzić.
Przykład
To polecenie ustawia punkt przerwania na obsłudze komunikatów dla okna, które ma uchwyt 9BC.
Punkt przerwania wyzwala się i pojawia się SoftICE kiedy obsługa komunikatów odbiera komunikat
z typem wewnątrz zakresu WM_MOUSEFIRST do WM_MOUSELAST. Zakres ten obejmuje
wszystkie komunikaty myszki Windows
BMSG 9BC wm_mousefirst wm_mouselast
Kolejne polecenie umieszcza punkt przerwania na obsłudze komunikatów dla tego okna z uchwytem
F4C. Parametr L powoduje logowanie SoftICE informacji punktu przerwania do okna Poleceń
SoftICE kiedy punkt przerwania jest wyzwolony, zamiast pojawienia się. Zakres komunikatu na
którym wyzwala się punkt przerwania obejmujący dowolny komunikat z wartością typu mniej niż
równe WM_CREATE. Możesz podejrzeć dane wyjściowe z tego punktu przerwania będącego
wyzwolonym przez pojawienie się SoftICE i przewija przez bufor poleceń
BMSG f4c L 0 wm_create
BPE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktów przerwań
Definicja
Edytuje opis punktu przerwania
Składnia
BPE indeks punktu przerwania
indeks punktu przerwania
Numer indeksu punktu przerwania
Użycie
Polecenie BPE pozwala ci wyedytować lub zamienić istniejące punkty przerwań. Użyj klawiszy
edycyjnych dla edycji opisu punktu przerwania. Naciśnij Enter dla zachowania opisu nowego punktu
przerwania. Polecenie to oferuje szybki sposób dla zmodyfikowania parametrów istniejącego punktu
przerwania
Ostrzeżenie: BPE najpierw czyści punkt przerwania przed jego załadowaniem do lini edycyjnej. Jeśli
wtedy naciśniesz klawisz Escape, punkt przerwania zostanie wyczyszczony. Dla uzyskania
pierwotnego punktu przerwania i stworzenia innego , użyj polecenia BPT, który używa pierwotnego
punktu przerwania jako szablonu edycyjnego bez pierwszego jego usunięcia.
SoftICE rozszerza dowolne wyrażenie warunkowe lub działanie punktu przerwania, które są częścią
wyrażeń punktu przerwania.
Przykład
To polecenie pozwala wyedytować punkt przerwania 1 do edycji
BPE 1
Kiedy wpisano polecenie. SoftICE wyświetli definicję istniejącego punktu przerwania i pozycjonuje
wejściowy kursor po adresie punktu przerwania
BPE 1
BPX 80104324 if (eax ==1) d0 „dd esi”
Dla ponownego wpisania punktu przerwania po wyedytowania, naciśnij klawisz Enter. Dla
wyczyszczenia punktu przerwania, naciśnij klawisz Escape
BPINT
OS
Windows 3.1
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania na przerwaniu
Składnia
BPINT numer przerwania [al. | ah | ax = wartość][c= licznik]
numer przerwania
numer przerwania od 0 do 5Fh
wartość
wartość bajtu lub słowa
c=
licznik wyzwoleń punktu przerwań
Użycie
Użyj polecenie BPINT do pojawienia się SoftICE gdy tylko wystąpi określony wyjątek procesora,
przerwanie sprzętowe lub przerwanie programowe. Wartość określona w rejestrze AX (AL.=, AH=
lub AX=) może być użyta do ustawienia punktu przerwania, który wyzwala się tylko kiedy rejestr AX
dopasuje określoną wartość w tym czasie kiedy wystąpi przerwanie lub wyjątek. Ta umiejętność jest
często używana do selektywnego ustawiania punktów przerwań dla funkcji DOS i BIOS. Jeśli
wartość rejestru AX nie jest wprowadzona, punkt przerwania wystąpi za każdym razem kiedy pojawi
się przerwanie lub wyjątek. Dla punktów przerwań, które wyzwalają się z powodu przerwań
sprzętowych lub wyjątków procesora, wskaźnik instrukcji (CS:EIP) w czasie pojawienia się SoftICE
wskazuje pierwszą instrukcję podprogramu obsługi przerwania lub wyjątku wskazywanego przez
tablicę deskryptorów przerwań (IDT). Jeśli przerwanie programowe wyzwoli punkt przerwania,
wskaźnik instrukcji (CS:EIP) wskazuje instrukcję INT która spowodowała punkt przerwania.
BPINT działa tylko dla przerwań, które są obsługiwane przez IDT.
Dodatkowo, Windows odwzorowuje przerwania sprzętowe, które domyślnie odwzorowują wektory 8
–Fh i 70h – 77h, wyższe numery zabezpieczają przed konfliktem z przerwaniami programowymi.
Pierwszy sterownik przerwań jest odwzorowany przez wektory 50h – 57h. Rugi sterownik przerwań
jest odwzorowany przez wektory 58h – 5Fh.
Przykład: IRQ0 to INT50h a IRQ8 to INT58k\h
Jeśli BPINT wyzwolony jest z powodu instrukcji przerwania programowego w VM DOS,
sterowanie zostanie przeniesione do programu obsługi przerwań trybu chronionego Windows do
błędu ochrony. Ten program ostatecznie sprowadza właściwy program obsługi przerwań VM DOS
który jest wskazany przez tablicę Wektorów Przerwań VM DOS. Aby przejść bezpośrednio do
programu obsługi przerwań VM DOS po wystąpieniu BPINT na instrukcji przerwania
programowego, użyj polecenia:
G @&0 : numer przerwania * 4
Przykład
Poniższe polecenie definiuje punkt przerwania dla przerwania 21h. Punkt przerwania wystąpi kiedy
funkcja DOS wywoła 4Ch (zakończenie programu). W tym czasie pojawi się SoftICE, wskaźnik
instrukcji wskaże na instrukcję INT w VM DOS
BPINT 21 ah =4c
Kolejne polecenie ustawi punkt przerwania, które wyzwala się przy każdym takcie zegara
sprzętowego . Generalnie to polecenie nie jest zalecane ponieważ wyzwala się często. W tym czasie
pojawia się SoftICE, wskaźnik instrukcji będzie na pierwszej instrukcji programu obsługi przerwań
Windows dla przerwania 50h
BPIO
Zobacz
Dla Windows 9x i rodziny Windows NT odnieś się do poniższego plecenia
BPINT
OS
Windows 9x i rodzina Windows NT
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania na przerwaniu
Składnia
BPINT numer przerwania [IF wyrażenie][DO „polecenie1;polecenie2;...]
numer przerwania
Numer przerwania od 0 do FFh
IF wyrażenie
Wyrażenie warunkowe; wyrażenie musi wyliczyć TRUE (nie
zero) dla wyzwolenia punktu przerwania
DO polecenia
Działanie punktu przerwania: Szereg poleceń SoftICE, które
wykonają się po wyzwoleniu punktu przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i kontroli
punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów przerwań.
Użycie
Użyj plecenia BPINT dla pojawienia się SoftICE gdy tylko wystąpi określony wyjątek, przerwanie
sprzętowe lub przerwanie programowe. Możesz użyć opcji IF do określenia wyrażenia warunkowego,
które ogranicza te przerwania, które wyzwalają punkt przerwania. Możesz użyć opcji DO do
określenia poleceń SoftICE, które będą się wykonywały za każdym razem kiedy przerwanie wyzwoli
punkt przerwania. Dla punktów przerwań, które wyzwalają przerwania sprzętowe lub wyjątki
procesora, wskaźnik instrukcji (CS:EIP) w czasie pojawienia się SoftICE wskazuje pierwszą
instrukcję podprogramu obsługi przerwania lub wyjątku wskazywanego przez tablicę deskryptorów
przerwań (IDT). Jeśli punkt przerwania wyzwala przerwanie programowe, wskaźnik instrukcji
(CS:EIP) wskazuje instrukcję INT, która spowodowała punkt przerwania.
BPINT działa tylko z przerwaniami które są obsługiwane przez IDT. Jeśli wystąpi przerwanie
programowe w VM DOS, sterowanie jest przenoszone do programu obsługi przerwań trybu
chronionego Windows. Program ten ostatecznie sprowadza program obsługi przerwań VM DOS,
który jest wskazywany przez Tablicę Wektorów Przerwań VM DOS. Dla bezpośredniego przejścia do
programu obsługi przerwań VM DOS po wystąpieniu BPINT na instrukcji przerwania programowego
użyj polecenia:
G @ &0: (numer przerwani *4)
Dla Windows 9x
Windows odwzorowuje przerwania sprzętowe, które domyślnie są odwzorowane do wektorów 8- Fh i
70h – 77h, wyższe numery chronią przed konfliktem z przerwaniami programowymi. Pierwszy
sterownik przerwań jest odwzorowywany do wektorów 50h –57h. Drugi sterownik przerwań jest
odwzorowywany do wektorów 58h – 5Fh.
Przykład: IRQ0 to INT50h a IRQ8 to INT58h
Dla rodziny Windows NT
Rodzina Windows NT odwzorowuje przerwania sprzętowe, które domyślnie są odwzorowane do
wektorów 8- Fh i 70h – 77h, wyższe numery chronią przed konfliktem z przerwaniami
programowymi. Pierwszy sterownik przerwań jest odwzorowywany do wektorów 30h –37h. Drugi
sterownik przerwań jest odwzorowywany do wektorów 38h – 3Fh.
Przykład: IRQ0 to INT30h a IRQ8 to INT38h
Przykład
Poniższy przykład daje w wyniku w rodzinie Windows NT system wywołań punktów przerwań
(przerwanie programowe 2Eh) będąc wyzwolonym tylko jeśli wątek czyniący system wywołania ma
ID wątku (TID) równy bieżącemu wątkowi w czasie wpisywania polecenia (_TID).Za każdym
trafieniem punktu przerwania, zwartość z pod adresu 82345829j jest zrzucana jako wynik opcji DO
BPINT 2e if tid = _tid do „dd 82345829”
Zobacz
Dla Windows 3.1 spójrz na wcześniejsze polecenie BPINT
BPIO
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania na dostępie do portu I/O
Składnia
Dla Windows 3.1
BPIO port [nazwa rozkazu] [wartość kwalifikatora][c= licznik]
Dla Windows 9x
BPIO [-h] port [nazwa rozkazu] [IF wyrażenie][DO „poleceni1;polecenie2;...]
Dla rodziny Windows NT
BPIO port [nazwa rozkazu][IF wyrażenie][DO „polecenie1;polecenie2;...]
port
wartość bajtu lub słowa
nazwa rozkazu
Wartość
Opis
R
Odczyt (IN)
W
Zapis (OUT)
RW
Odczyt i Zapis
kwalifikator
Wartość kwalifikatora
Opis
EQ
Równy
NE
Nie równy
GT
Większy niż
LT
Mniejszy niż
M.
Maska. Bit maki jest przedstawiany jako
połączenie 1 , 0 i X’ów. X’y nie są
traktowane jako bity
wartość
Bajt , słowo lub podwójne słowo
c=
Licznik wyzwoleń punktu przerwania
-h
Użycie sprzętowego rejestru diagnostycznego do ustawienia punktu
przerwania w urządzeniu wirtualnym (VxD). Dostępne tylko w
procesorach klasy Pentium Windows 9x
IF wyrażenie
Wyrażenie warunkowe; wyrażenie musi wyliczyć TRUE (nie
zero) dla wyzwolenia punktu przerwania
DO polecenia
Działanie punktu przerwania: Szereg poleceń SoftICE, które
wykonają się po wyzwoleniu punktu przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i kontroli
punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów przerwań.
Użycie
Użyj instrukcji BPIO mając już SoftICE gdy tylko określony I/O port jest dostępny we wskazany
sposób. Kiedy wyzwolony jest punkt przerwanie BPIO, wskaźnik instrukcji (CS:EIP) wskazuje
instrukcję następującą po instrukcji IN lub OUT, które spowodowały punkt przerwania.
Jeśli nie określisz nazwy rozkazu, domyślnym jest RW
Dla Windows 3.1
Jeśli określisz nazwę rozkazu i wartość parametrów, SoftICE porówna te wartości jakie określiłeś z
bieżącą wartością danej odczytaną lub zapisaną przez instrukcje IN lub OUT, które spowodowały
punkt przerwania. Wartością może być bajt, słowo lub podwójne słowo. Możesz użyć parametru
nazwy rozkazu do określenia porównania równości, nierówności, większe niż lub równe, mniejsze niż
lub równe lub logiczne AND
Dla Windows 9x
Ze względu na zachowanie architektury x86, punkty przerwań BPIO są aktywne tylko podczas gdy
procesor wykonuje poziom uprzywilejowania RING 3. Oznacza to, że aktywność I/O wykonywana
przez kod RING 0, taki jak VxD’ki i wirtualny menadżer maszyny Windows (VMM) nie jest
śledzona przez punkty przerwań BPIO. Tylko dla Windows 9x, możesz użyć przełącznika –H dla
wymuszenia na SoftICE zastosowania sprzętowych rejestrów diagnostycznych. Pozwoli ci to śledzić
wykonywanie I/O przez Ring 0 w VxD’kach.
Windows wirtualizuje wiele systemowych portów I/O, oznaczając ,że VxD’ki mają zarejestrowane
programy obsługi, które są wywoływane kiedy Ring3 uzyskuje dostęp do tych portów. Dla pobrania
listy wirtualizowanych portów użyj polecenia TSS. Polecenie to pokazuje każdy uzależniony port I/O,
adres jego powiązanego programu obsługi i nazwę VxD, którego jest właścicielem. Aby zobaczyć jak
określony port jest wirtualizowany , ustaw polecenie BPX na adresie programu obsługi I/O.
Dla rodziny Windows NT
Polecenie BPIO używa rejestru diagnostycznego dostarczonego w Pentium ,dlatego też, punkty
przerwań I/O dostępne są tylko na maszynach klasy Pentium.
Kiedy używasz rejestru diagnostycznego dla punktów przerwań I/O, wszystkie fizyczne instrukcje
I/O (nie emulowane) są śledzone bez względu na poziom uprzywilejowania z którego są
wykonywane. Jest różnica w stosowaniu mapy bitowej I/O od śledzenia I/O, ponieważ jest to robione
dla SoftICE uruchomionym pod Windows 3.1 i Windows 9x (bez przełącznika –H). Metoda mapy
bitowej I/O może tylko śledzić I/O robione z poziomu kodu użytkownika, podczas gdy kłopot z
metodą rejestru diagnostycznego dla śledzenia portu I/O jest taki ,że nie śledzi emulowanych I/O
takich jak I/O wykonywane z okna DOS.
Ze względu na ograniczenia w liczbie rejestrów diagnostycznych dostępnych na procesorach x86,
mogą być ustawione maksymalnie cztery BPIO w jednym czasie.
Przykład
Poniższe polecenia definiują warunkowe punkty przerwań przy dostępie do portu 21h . te punkty
przerwań wyzwalają się tylko jeśli dostęp jest dostępem zapisu, a wartość będąca zapisywaną nie jest
FFh.
Dla Windows 3.1uzyj polecenia
BPIO 21 w ne ff
Dla Windows 9x i rodziny Windows NT użyj polecenia
BPIO 21 w if (al. != 0xFF)
Notka: W przykładzie w Windows NT/2000/XP powinieneś być ostrożny przy wewnętrznych
założeniach czynionych na temat rozmiaru operacji I/O poddanych śledzeniu. Port I/O będący
śledzonym to OUTB.OUTW z AL.==FFh również wyzwala punkt przerwania, chociaż w tym
przypadku wartość w AL. Kończy zapisywanie do portu 22h.
Poniższy przykład definiuje bajtowy warunkowy punkt przerwania na odczycie portu 3Feh. Ten
punkt przerwania wystąpi za pierwszym razem kiedy port 3FEH czyta wartość , która ma dwa
najwyższe bity ustawione na 1. Pozostałe bity mogą mieć różne wartości
Dla Windows 3.1 użyj polecenia
BPIO 3fe r eq m. 11xx xxxx
Dla Windows 9x i rodziny Windows NT użyj polecenia
BPIO 3fe r if ((al. & 0xC0) ==0xC0)
BPM
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania na dostępie do pamięci lub wykonywaniu
Składnia
Dla Windows 3.1
BPM [rozmiar] adres [nazwa rozkazu] [wartość kwalifikatora] [rejestr diagnostyczny][c= licznik]
Dla Windows 9x
BPM[rozmiar][.t][.p][.a][.v] adres [nazwa rozkazu];rejestr diagnostyczny][IF wyrażenie][DO
„poleenie1;poleceie2;...]
Dla rodziny Windows NT
BPM[rozmiar[.t][.p] adres [nazwa rozkazu][rejestr diagnostyczny][IF wyrażenie][DO
„polecenie1;polecenie2;...]
rozmiar
Rozmiar określający zakres pokrywany przez punkt przerwania.
Na przykład, jeśli użyjesz podwójnego słowa, a trzeci bajt
dwusłowa zmodyfikowano, pojawi się punkt przerwania. Rozmiar
jest również ważny jeśli określisz opcjonalny kwalifikator (tj.
BPMB, BPMW czy BPMD)
Wartość
Opis
B
Bajt
W
Słowo
D
Podwójne słowo
polecenia modyfikujące SoftICE
może zaakceptować plecenia modyfikujące (.t, .p, .a i .v)
dla ograniczenia zasięgu punktu przerwania dla wszystkich
poleceń punktów przerwań. Modyfikatory dostępne są na OS’ach
aktualnie używanych , jak pokazano w tabelce
Wartość
Opis
System operacyjny
.t
Warunkowo ustawia
Win9x/NT/2K/XP
punkt przerwania
wyzwalany w aktywnym
wątku
.p
Warunkowo ustawia
Win9x/NT/2k?XP
punkt przerwania
wyzwalany w aktywnym
ID procesu
.a
Warunkowo ustawia
Win9x
punkt przerwania
wyzwalany w aktywnym
kontekście adresu
.v
Warunkowo ustawia
Win9x
punkt przerwania
wyzwalany w aktywnym
ID VMM
nazwa rozkazu
Wartość
Opis
R
Odczyt
W
Zapis
RW
Odczyt i Zapis
X
Wykonanie
kwalifikator
Kwalifikatory te mają zastosowanie tylko do odczytu i zapisu
punktów przerwań; nie wykonywalnych punktów przerwań
Wartość kwalifikatora
Opis
EQ
Równy
NE
Nie równy
GT
Większy niż
LT
Mniejszy niż
M.
Maska. Bit maski jest przedstawiany
jako kombinacja 1, 0 i X. X’y nie są
traktowane jako bity
wartość
Wartość bajt, słowa lub podwójnego słowa w zależności od tego
jaki określiłeś rozmiar
rejestry diagnostyczne
Wartość
DR0
DR1
DR2
DR3
c=
licznik wyzwoleń punktu przerwania
IF wyrażenie
Wyrażenie warunkowe; wyrażenie musi wyliczyć TRUE (nie
zero) dla wyzwolenia punktu przerwania
DO polecenia
Działanie punktu przerwania: Szereg poleceń SoftICE, które
wykonają się po wyzwoleniu punktu przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i kontroli
punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów przerwań.
Użycie
Użyj punktu przerwania BPM mając już SoftICE gdy tylko pewien typ dostępu został uczyniony do
komórki pamięci. Możesz użyć parametrów rozmiaru i nazwy rozkazu dla filtrowania tego dostępu ze
względu na ich typ i możesz użyć parametru DO, tylko na platformie rodziny Windows NT, do
określenia arbitralnego poleceń SoftICE, które wykonają się przy każdym trafieniu punktu
przerwania. Jeśli nie określisz rejestru diagnostycznego, SoftICE użyje pierwszego dostępnego
rejestru diagnostycznego od DR3 w dół. Nie powinieneś obejmować rejestrów diagnostycznych,
chyba ,że debuggujesz aplikację, która sama używa rejestrów diagnostycznych, taką jak inne
narzędzie debuggujące. Jeśli nie określisz nazwy rozkazu, domyślnym będzie RW .J jeśli nie
określisz rozmiaru, domyślnym będzie B. Dla wszystkich typów nazw rozkazów z wyjątkiem X,
SoftICE pojawi się po instrukcji ,która powoduje wykonanie wyzwolenia punktu przerwania, a
CS:EIP wskazuje instrukcję gdzie był ustawiony punkt przerwania. Jeśli określisz nazwę rozkazu R,
punkt przerwania wystąpi przy odczycie i operacji zapisu, która nie zmienia wartości komórki
pamięci. Jeśli określisz nazwę rozkazu na R, W lub RW, wykonanie instrukcji pod określonym
adresem nie spowoduje wystąpienia punktu przerwania. Jeśli określisz rozmiar na W (BPMW), to jest
punkt przerwania pamięci o rozmiarze słowa, musisz określić adres zaczynający się na granicy słowa.
Jeśli określisz rozmiar na D (BPMD), punkt przerwania pamięci podwójnego słowa , musisz określić
adres zaczynający się od granicy podwójnego słowa.
Dla Windows 3.1
W Windows 3.1 możesz użyć parametru licznika do wyzwolenia punktu przerwania tylko po tym jak
został trafiony określoną ilość razy. Domyślną wartością licznika jest 1, oznaczając, że punkt
przerwania zostanie wyzwolony za pierwszym razem kiedy jest spełniony warunek punktu
przerwania. Licznik jest resetowany za każdym razem kiedy wyzwolony jest punkt przerwania.
Dla Windows 9x
Punkty przerwań BPM ustawione w zakresie 400000 – 7FFFFFFFh (aplikacje Win32) są
kontekstowe To znaczy, punkty przerwań są wyzwalane tylko kiedy kontekst adresu w którym jest
ustawiony punkt przerwania jest aktywny. Jeśli BPM jest ustawiony w DLL’u , który istnieje w wielu
kontekstach, punkt przerwani jest gotowy we wszystkich tych kontekstach w których on istnieje. Na
przykład jeśli ustawisz punkt przerwania BPM X w KERNEL32 może on przerwać w każdym
kontekście który zawiera KERNEL32.DLL
Dla rodziny Windows NT
Każdy punkt przerwania ustawiony na adresie poniżej 80000000h (2GB) jest kontekstowy. To
znaczy, punkt przerwani jest wyzwalany tylko kiedy kontekst adresu w którym jest ustawiony punkt
przerwania jest aktywny. Obejmuje to aplikacje WIN32 i V86 DOS. Upewnij się ,że jesteś w
odpowiednim kontekście zanim ustawisz punkt przerwania
Przykład
Poniższy przykład definiuje punkt przerwania na bajcie dostępu do pamięci do adresu wskazywanego
przez ES:DI+1Fh/ ZA pierwszym razem, kiedy 10H jest zapisane do tej lokacji, wyzwalany jest punkt
przerwania
Dla Windows 3.1 użyj polecenia
BPM es:di +1f w eq 10
Dla Windows 9x i rodziny Windows NT użyj polecenia
BPM es:di +1f w if (*(es:di+1f) ==0x10)
Kolejny przykład definiuje punkt przerwania wykonania na instrukcji pod adresem CS:80204D20h.
Za pierwszym razem, kiedy instrukcja spod tego adresu jest wykonana, wystąpi punkt przerwania
Dla Windows 3.1, Windows 9x i rodziny Windows NT użyj polecenia
BPM CS:80204D20 x
Poniższy przykład definiuje punkt przerwania słowa na zapisie do pamięci. Punkt przerwania wystąpi
za pierwszym razem, kiedy lokacja Foo ma wartość zapisaną do niej ustawia najwyższy bit na 0 a
najniższy bit na 1. Pozostałe bity mogą mieć różne wartości
Dla Windows 3.1 użyj polecenia
BPMW foo e eq m. 0xxx xxxx xxxx xxx1
Przykład ten ustawia bajtowy punkt przerwania na zapisie pamięci. Punkt przerwania wyzwoli się za
pierwszym razem, kiedy bajt spod lokacji DS.:80150000h ma wartość zapisywaną do niej, która jest
większa niż 5
Dla Windows 3.1 użyj polecenia
BPM ds.:8015000 w gt 5
Dla Windows 9x i rodziny Windows NT użyj polecenia
BPM ds.:80150000 if (byte(*ds.:80150000) > 5)
BPR
OS
Windows 3.1 i Windows 9x
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania na zakresie pamięci
Składnia
Dla Windows 3.1
BPR adres startowy adres końcowy [nazwa rozkazu] [c= licznik]
Dla Windows 9x
BPR adres startowy adres końcowy [nazwa rozkazu][IF wyrażenie][DO „polecenie1;polecenie2;...]
adres startowy
Początek zakresu pamięci
adres końcowy
Zakończenie zakresu pamięci
nazwa rozkazu
Wartość
Opis
R
Odczyt
W
Zapis
RW
Odczyt i Zapis
T
Wsteczne śledzenie na wykonaniu
TW
Wsteczne śledzenie na zapisie pamięci
c=
licznik wyzwoleń punktu przerwania
IF wyrażenie
Wyrażenie warunkowe; wyrażenie musi wyliczyć TRUE (nie
zero) dla wyzwolenia punktu przerwania
DO polecenia
Działanie punktu przerwania: Szereg poleceń SoftICE, które
wykonają się po wyzwoleniu punktu przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i kontroli
punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów przerwań
Użycie
Użyj polecenia BPR do ustawienia punktu przerwania, który wyzwala się ilekroć jest czyniony
pewien typ dostępu do wejścia zakresu adresu. Nie ma wyraźnego zakresu punktu przerwania dla
dostępu wykonania. Jednakże, możesz użyć nazwy rozkazu R do ustawienia wykonywalnego punktu
przerwania na zakresie. Pobrana instrukcja jest rozpatrywana jako czytana dla punktu przerwania
zakresu. Jeśli nie określisz nazwy rozkazu, domyślnym jest W. Punkt przerwania zakresu stopniuje
wydajność systemu w pewnych sytuacjach. Odczyt i lub zapis wewnątrz 4KB strony, która zawiera
zakres punktu przerwania jest analizowany przez SoftICE dla określenia czy jest spełniony warunek
punktu przerwania. To stopniowanie wydajności jest zazwyczaj nie zauważalne, jednak,
stopniowanie może być ostatecznością w przypadku kiedy mamy częsty dostęp do zakresu. Nazwy
rozkazów T i TW włączają wsteczne śledzenie zakresu w określonym zakresie. Nie powodują one
punktów przerwań, ale zamiast zapisu informacji o wszystkich instrukcjach, które mogą powodować
wyzwolenie punktu przerwania do logowania, może to być wyświetlone poleceniami SHOW lub
TRACE.
Kiedy jest wyzwolony punkt przerwania i pojawił się SoftICE, bieżący wskaźnik rozkazów CS:EIP
wskazuje instrukcję , która spowodowała punkt przerwania. Punkty przerwania zakresu są zawsze
ustawione w tablicy stron, które są aktywne kiedy wpisujesz polecenie BPR. Dlatego też jeśli zakresy
adresów są poniżej 4MB, punkt przerwania zakresu będzie powiązany z wirtualną maszyną, która
jest aktualna kiedy wpisałeś BPR. Z tego powodu tego faktu, jest kilka obszarów w pamięci gdzie
punkty przerwania zakresu nie są obsługiwane. Są to tablice stron, tablica globalnych deskryptorów
(GDT), tablica deskryptorów przerwań (IDT), tablicę lokalnych deskryptorów (LDT) i sam SoftICE.
Jeśli spróbujesz ustawić punkt przerwania zakresu lub zakres śledzenia wstecznego na tych
obszarach, SoftICE zwróci błąd.
Są dwa inne obszary danych w których nie powinieneś umieszczać punktu przerwani zakresu, ale jeśli
to zrobisz SoftICE nie zwróci błędu. Są to stosy poziomu 0 Windows i obszary krytyczne w VMM.
Stosy poziomu 0 Windows są zazwyczaj oddzielnie alokowanymi segmentami danych . Jeśli ustawisz
zakres na stosie poziomu 0 lub obszarze krytycznym w VMM, możesz zawiesić system. Jeśli pamięć,
którą pokrywa punkt przerwania zakresu jest zamieniana lub przesuwana, punkt przerwania zakresu
podąża za nią
Dla Windows 3.1
Parametr licznik może być użyty do wyzwolenia punktu przerwania tylko po tym jak został trafiony
określoną ilość razy. Domyślną wartością licznika jest 1, oznaczając ,że punkt przerwania będzie
wyzwolony za pierwszym razem kiedy warunek punktu przerwania będzie spełniony. Licznik jest
resetowany po każdym wyzwoleniu punktu przerwania
Dla Windows 9x
Ze względu na zmianę w architekturze systemu, BPR’y nie są dłużej obsługiwane z poziomu 0 kodu.
Zatem, nie możesz użyć BPR’ów dla śledzenia kodu VxD
Przykład
Poniższy przykład definiuje punkt przerwania na zakresie pamięci. Punkt przerwani wystąpi jeśli są
jakieś zapisy do pamięci pomiędzy adresami ES:0 i ES:1FFF
BPR es:0 es:1fff w
BPRW
OS
Windows 3.1 i Windows 9x
Typ
Punkty przerwań
Definicja
Ustawia punkt przerwania w programie Windows lub segmencie kodu
Składnia
Dla Windows 3.1
BPRW nazwa modułu | selektor [nazwa rozkazu]
Dla Windows 9x
BPRW nazwa modułu | selektor [nazwa rozkazu] | IF wyrażenie][DO poleenie1;poleenie2;...]
nawa modułu
dowolna poprawna nazwa modułu Windows, która zawiera wykonywalne
segmenty kodu.
selektor
poprawny 16 bitowy selektor w programie Windows
nazwa rozkazu
Wartość
Opis
R
Odczyt
W
Zapis
RW
Odczyt i Zapis
T
Śledzenie wsteczne na wykonaniu
TW
Śledzenie wsteczne na zapisie pamięci
IF wyrażenie
Wyrażenie warunkowe; wyrażenie musi wyliczyć TRUE (nie
zero) dla wyzwolenia punktu przerwania
DO polecenia
Działanie punktu przerwania: Szereg poleceń SoftICE, które
wykonają się po wyzwoleniu punktu przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i kontroli
punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów przerwań.
Użycie
Polecenie BPRW jest najkrótszym sposobem ustawienia punktu przerwania zakresu na albo
wszystkich segmentach kodu, albo pojedynczym segmencie programu Windows. Polecenie BPRW w
rzeczywistości ustawia ten sam typ punktu przerwania jak polecenie BPR.A zatem, jeśli wpiszesz
polecenie BL po wprowadzeniu polecenia BPRW, zobaczysz gdzie oddzielne punkty przerwań
zakresu zostały ustawione dla pokrycia segmentów określonych poleceniem BPRW.
Poprawne selektory dla 16 bitowego programu Windows mogą być uzyskane przez instrukcję HEAP.
Wyczyszczenie punktu przerwania stworzonego poleceniami BPRW wymaga aby ., każdy z tych
punktów przerwań zakresu był oddzielnie czyszczony poleceniem BC.
Notka: Polecenie BPRW może stać się bardzo wolne kiedy użyjesz nazwy rozkazu T do wstecznego
śledzenia lub kiedy używamy polecenia w połączeniu z kwalifikatorem zakresu CSIP
Dla Windows 9x
Ze względu na zmiany w architekturze systemu BPR’y nie są dłużej obsługiwane na poziomie 0
kodu. Na przykład nie możesz ustawić BPR’a do śledzenia kodu VxD. Kiedy BRPW jest ustawiony
na 32 bitową aplikację lub DLL. Pojedynczy punkt przerwania zakresu jest ustawiony na start przy
wykonywalnym obrazie bazowym a kończony przy obrazie bazy plus rozmiar obrazu.
Popularne zastosowania
Polecenie BPRW jest powszechnie używane w następujący sposób
*Do ustawienia zakresu historii śledzenia wstecznego na całej aplikacji Windows lub DLL, określ
nazwę modułu i nazwę rozkazu na T
*Do ustawienia punktu przerwania, który wyzwala się kiedy program się wykonuje, użyj rozkazu R.
Rozkaz ten przerywa na wykonaniu jak również odczytuje ponieważ pobieranie instrukcji jest
rozpatrywane jako odczyt dla punktu przerwania zakresu
*Użyj [polecenia BPRW jako wygodnej formy BPR. Zamiast wymaganego wyszukiwania bazy
segmentu i ograniczeń poleceniami LDT i GDT, musisz tylko znać selektor segmentu.
Przykład
Poniższy przykład ustawia zakres wstecznego śledzenia na wszystkich segmentach kodu w
Menadżerze Programów. Wszystkie instrukcje, które wykonuje Menadżer Programów są logowane
do bufora historii wstecznego śledzenia i może później być oglądanym poleceniami TARCE i SHOW
BPRW progman t
BPT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Manipulowanie punktów przerwań
Definicja
Użycie opisu punktu przerwań jako szablonu
Składnia
BPT [.t | .p] numer punktu przerwania
modyfikator polecenia
polecenia modyfikatorów (.t lub .p) ograniczają zakres punktu
przerwania
numer punktu przerwania
numer indeksu punktu przerwania
Użycie
Polecenie BPT używa istniejącego opisu punktu przerwania jako szablonu dla zdefiniowania nowego
punktu przerwania. Polecenie BPT ładuje szablon opisu punktu przerwania do lini edycyjnej dla
modyfikacji. Użyj klawiszy edycyjnych dla edycji opisu punktu przerwania i wpisz Enter dla dodania
nowego opisu punktu przerwania. Oryginalny punkt przerwania do którego odnosimy się przez
indeks punktu przerwania nie jest zmieniony. Polecenie to oferuje szybki sposób modyfikacji
parametrów istniejącego punktu przerwania. Kiedy SoftICE wyświetla opis punktu przerwania,
rozszerza wyrażenia warunkowe lub działanie punktu przerwania.
Przykład
Poniższy przykład przenosi szablon punktu przerwania 3 do lini edycyjnej, bez usuwania punktu
przerwania 3. Naciśnij Enter dla dodania nowego punktu przerwania
BPT 3
: BPX 1b: 401200 if (eax==1) do „dd esi”
BPX
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Punkty przerwań
Klawisz
F9
Definicja
Ustawia lub czyści punkt przerwania na wykonaniu
Składnia
Dla Windows 3.1
BPX [adres][c= licznik]
Dla Windows 9x i rodziny Windows NT
BPX [.t | .p][adres] [IF wyrażenie][DO „polecenie1;poleenie2;...”]
modyfikator polecenia
Modyfikator polecenia (.t lub .p) ogranicza zasięg punktu
przerwania
adres
Adres liniowy dla ustawionego punktu przerwania wykonania
c=
licznik wyzwoleń punktu przerwania
IF wyrażenie
Wyrażenie warunkowe; wyrażenie musi wyliczyć TRUE (nie
zero) dla wyzwolenia punktu przerwania
DO polecenia
Działanie punktu przerwania: Szereg poleceń SoftICE, które
wykonają się po wyzwoleniu punktu przerwania
Notka: Możesz połączyć funkcje zliczające punktów przerwań (BPCOUNT,
BPMISS,BPTOTAL,BPLOG i BPINDEX) z wyrażeniami warunkowymi do monitorowania i kontroli
punktów przerwań opartych na ilości razy wyzwolenia lub nie określonych punktów przerwań.
Użycie
Używamy polecenia BPX do definiowania punktów przerwań wyzwalanych gdy tylko instrukcja
spod określonego adresu jest wykonywana. Modyfikator polecenia (.t lub .p) ogranicza zasięg punktu
przerwania. Modyfikator .t warunkowo ustawia punkt przerwania do wyzwolenia w aktywnym
wątku, podczas gdy modyfikator .p warunkowo ustawia punkt przerwania dal wyzwolenia w
aktywnym ID Procesu. Musisz ustawić parametr adres dla wskazywania na pierwszy bajt opkodu
instrukcji , instrukcji na której chcesz ustawić punkt przerwania. Jeśli nie jest określony żaden a
kursor jest w oknie Kodu kiedy zaczynasz wpisywać polecenie, ustawiany jest punkt przerwania
„wskaż i wybierz” na adresie instrukcji pod lokacją kursora w oknie Kodu. Jeśli zdefiniujesz punkt
przerwania wskaż i wybierz pod adresem gdzie już istnieje punkt przerwania, istniejący punkt
przerwania jest czyszczony
Notka: Użyj polecenia EC (domyślny klawisz F6) do przeniesienia kursora do okna Kodu.
Jeśli kursor nie jest w oknie Kodu kiedy wpisujesz polecenie BPX, musisz określić adres. Jeśli
określisz tylko offset, bieżąca wartość rejestru CS jest używana jako segment.
Polecenie BPX normalnie umieszcza instrukcję INT3 pod adresem punktu przerwania. Ta metoda
punktu przerwania jest używana zamiast przypisania rejestru diagnostycznego dla uczynienia
dostępnymi dużo więcej punktów przerwania wykonania Jeśli musisz użyć punktu przerwania
rejestru, na przykład, ustawiony punkt przerwania na kodzie nie jest jeszcze załadowany w VM DOS,
ustaw punkt przerwania wykonania poleceniem BPM i określ X jako rozkaz.
Jeśli spróbujesz ustawić BPX na adresie, który jest w ROM, punkt przerwania rejestru jest używany
automatycznie dla tego punktu przerwania zamiast normalnego umieszczenia INT 3 pod adresem
docelowym. Metoda ta musi być użyta ponieważ ROM nie może być modyfikowany.
Polecenie BPX akceptuje 16 bitowe nazwy modułów Windows jako parametr adres. Kiedy wpiszesz
nazwę modułu 16 bitowego, SoftICE ustawi punkt przerwania w stylu BPX na każdym
eksportowanym punkcie wejścia w module. BPX KERNEL ustawi punkt przerwania na każdej
funkcji w 16 bitowym module KRNL386.EXE. Może to być bardzo użyteczne kiedy musisz ustawić
przerwanie kiedy kolejny raz dana funkcja w DLL jest wywoływana. SoftICE obsługuje maksymalnie
256 punktów przerwań kiedy używasz tego polecenia
Dla Windows 3.1 i Windows 9x
Punkty przerwań BPX w VM DOS są powiązane z VM w którym zostały ustawione. Jest tak
zazwyczaj kiedy chciałbyś debuggować program DOS w VM DOS. Jednakże , są sytuacje kiedy
możesz chcieć wyzwolenia punktu przerwania pod pewnym adresem bez względu na to czy VM jest
odwzorowany aktualnie. Zazwyczaj jest to prawda kiedy debuggujemy kod DOS lub w TSR, który
został uruchomiony przed zastartowaniem Windows. W tym przypadku użyj punktu przerwania BPM
z rozkazem X zamiast BPX.
Dla Windows 9x
Punkty przerwań BPX ustawiony w zakresie 400000 – 7FFFFFFF (aplikacje WIN32) są
kontekstowe. To znaczy są wyzwalane tylko kiedy kontekst w jakim są ustawione jest aktywny. Jeśli
punkt przerwania jest ustawiony w DLL’u który istnieje w wielu kontekstach, ten punkt przerwania
istnieje we wszystkich kontekstach.
Dla rodziny Windows NT
Dowolny punkt przerwania ustawiony na adresie poniżej 80000000h (2BG) jest kontekstowy. To
znaczy, wyzwalany jest tylko kiedy kontekst w jakim był ustawiony jest aktywny. Obejmuje to
aplikacje WIN32, WIN16 i V86 DOS. Upewnij się ,że masz poprawny kontekst zanim ustawisz punkt
przerwania.
Przykład
Przykład ten ustawia punkt przerwani wykonania na instrukcji 10h bajtów po bieżącym wskaźniku
instrukcji (CS:EIP)
BPX eip+10
Ten przykład ustawia punkt przerwania wykonania na lini źródłowej 1234 w bieżącym pliku
źródłowym
BPX .1234
Dla Windows 9x i rodziny Windows NT
Poniżej mamy przykład zastosowania wyrażenia warunkowego do kwalifikacji punktu przerwania. W
tym przypadku, punkt przerwania wyzwala się jeśli rejestr EAX jest wewnątrz określonego zakresu
BPX eip if eax > 1ff && eax <= 300
W tym przykładzie, działanie punktu przerwania jest użyte aby SoftICE automatycznie zrzucił
parametr dla wywołania .Za każdym razem kiedy punkt przerwani jest trafiony, zawartość ciągu
wskazywanego przez bieżące DS:DX wyświetlana jest w oknie Danych
BPX 80023455 do „db ds.:dx”
Zobacz
FILE
BSTAT
OS
Windows 9x i rodzina Windows NT
Typ
Punkty przerwań
Definicja
Wyświetla statystykę dla jednego lub więcej punktów przerwań
Składnia
BSTAT [# punkt przerwania]
# punkt przerwania
numer indeksu punktu przerwania
Użycie
Użyj BSTAT do wyświetlenia statystyk trafionych punktów przerwań, zagubionych i czy punkty
przerwań spowodowały pojawienie się SoftICE lub logowanie. Punkt przerwani będzie zapisany do
bufora historii zamiast pojawienia się SoftICE jeśli ma wyrażenie warunkowe, które używa makro
wyrażenia BPLOG. Ponieważ wyrażenia warunkowe są wyliczane kiedy punkt przerwania jest
wyzwalany, możliwe jest wystąpienie wyliczenia błędu czasu wykonania. Na przykład, możemy
odnieść się do symbolu wirtualnego, kiedy symbol ten nie został jeszcze załadowany, lub odniesienie
się do symbolu może nie być rozwiązaniem ponieważ pamięć nie jest obecna. W takich przypadkach,
bezie generowany błąd i odnotowane będzie w polach Status i Scode w kolumnie Misc. w danych
wyjściowych BSTAT.
Dane wyjściowe
Dla każdego punktu przerwania, SoftICE wyświetla następujące informacje
BP #
Indeks punktu przerwania, i jeśli jest wyłączony gwiazdkę (*)
Kategoria Całkowite:
Hits
całkowita ilość razy jaką SoftICE wykorzystał punkt przerwania
Breaks
całkowita ilość razy jaką punkt przerwani wyliczył TRU, a
SoftICE albo pojawiał się albo zapisywano punkt przerwania
Popups
Całkowita ilość razy jaką punkt przerwania spowodował
pojawienie się SoftICE
Logged
Całkowita ilość razy jaką punkt przerwania został zapisany
Misses
Całkowita ilość razy jaką punkt przerwania wyliczył FALSE
i nie została podjęta żadna akcja przez punkt przerwania
Errors
Całkowita ilość razy jaką wyliczenie punktu przerwania dało w
wyniku błąd.
Kategoria Bieżąca:
Hits
Bieżąca ilość razy jaką punkt przerwania wyliczył TRUE, ale
się nie pojawia ponieważ licznik wygasł.
Misses
Bieżąca ilość razy jaką punkt przerwania wyliczył FALSE, lub
licznik punktu przerwania nie wygasł
Kategoria Różne:
Status
Wewnętrzny status kodu SoftICE dla ostatniego razu kiedy punkt
przerwania został wyliczony, lub zero jeśli nie wystąpił
Scode
Ostatni nie zerowy wewnętrzny status kodu SoftICE, lub zero jeśli
żaden błąd ni wystąpił
Cond.
„Yes” jeśli punkt przerwania ma warunkowe wyrażenie, w
przeciwnym razie „No”
Action
„Yes” jeśli punkt przerwania ma zdefiniowane działanie punktu
Przerwania, w przeciwnym razie „No”
Przykład
Poniżej mamy przykład zastosowania polecenia BSTAT dla punktu przerwania #0:
BSTAT 0
Breakpoint Statistics for #00
BP #
*00
Totals
Hits
2
Breaks
2
Popups
2
Logged
0
Misses
0
Errors
0
Current
Hits
0
Misses
0
Misc
Status
0
Scode
0
Cond.
No
Action
Yes
C
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Różne
Definicja
Porównanie dwóch bloków danych
Składnia
C adres startowy L długość adres startowy 2
adres startowy
Początek pierwszego zakresu pamięci
L długość
Długość w bajtach
adres startowy 2
Początek drugiego zakresu pamięci
Użycie
Blok pamięci określony przez adres startowy i długość jest porównywany z drugim blokiem pamięci
określanym przez drugi adres startowy. Kiedy bajt z pierwszego bloku danych nie pasuje z bajtem
drugiego bloku danych, SoftICE wyświetli oba bajty razem z ich adresami
Przykład
Poniższy przykład porównuje 10h bajtów zaczynających się w komórce pamięci DS.:805FF000h z
10h bajtami zaczynającymi się w komórce pamięci DS.: 806FF000h
C ds.: 805ff000 L 10 ds.:806ff000
CLASS
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o klasach Windows
Składnia
Dla Windows 3.1
CLASS [nazwa modułu]
Dla Windows 9x
CLASS [-x] [nazwa zadania]
Dla rodziny Windows NT
CLASS [-x][typ procesu | typ wątku | typ modułu | nazwa klasy]
nazwa modułu
Dowolny, aktualnie załadowany moduł Windows. Nie wszystkie
moduły Windows mają zarejestrowane klasy.
-x
Wyświetla kompletne dla Windows 9x i rodziny Windows NT
wewnętrzne struktury danych CLASS, rozszerzając właściwe
pola do bardziej znaczącej postaci.
nazwa zadania
Bieżące wykonywalne 16 lub 32 bitowe zadanie
typ procesu
Nazwa procesu, ID procesu lub uchwyt procesu
typ wątku
ID wątku lub adres wątku (KTEB)
typ modułu
Nazwa modułu lub uchwyt modułu
nazwa klasy
nazwa zarejestrowanej klasy okna
Użycie
Dla Windows 9x
System operacyjny utrzymuje standardowe klasy okna w 16 bitowym trybie użytkownika (przez
Windows 3.1). System operacyjny utrzymuje wszystkie inne klasy okien w oddzielnych listach w
imieniu każdego procesu. Za każdym razem kiedy proces lub jeden z jego DLL’i rejestruje nową
klasę okna, program rejestrujący umieszcza tą klasę na jednej z dwóch list:
*Lista aplikacji globalnych zawiera klasy zarejestrowane z atrybutem CS_GLOBAL. Są one dostępne
procesowi lub dowolnemu z jego DLL’i.
*Lista aplikacji prywatnych zawiera klasy nie globalne. Dostęp do nich ma tylko moduł rejestrujący.
W końcu, proces lub DLL, który próbuje nadklasy jednej ze standardowych kontrolek okna , na
przykład LISTBOX, odbiera kopię tej klasy .Kopia rezyduje na liście systemu nadklas określonego
procesu. Poprzez uczynienie kopii standardowej klasy, proces lub DLL może zrobić nadklasę
dowolnej standardowej kontrolki okna bez wpływania na inne procesy w systemie.
Lista klas określonego procesu wyświetlana jest w następującym porządku:
*aplikacje prywatne
*aplikacje globalne
*system nadklas
W danych wyjściowych, linia przerywana oddziela każdą listę
Dla rodziny Windows NT
Architektura informacji klasy w rodzinie Windows NT jest podobna do tej z Windows 9x którym
informacja klasy jest określonym procesem a system operacyjny tworzy różne listy dla globalnych i
prywatnych klas. Poza tym, te dwa systemy operacyjne mają istotne różnice w implementowaniu
nadklasowości zarejestrowanych klas okien.
W rodzinie Windows NT, zarejestrowane klasy okien są rozpatrywane jako szablony, które opisują
podstawowe charakterystyki i sposoby działania okna (podobnie do notacji C++ klasy abstrakcyjnej)
.Kiedy okno danej klasy jest tworzone, szablon klasy staje się instancją przez uczynienie fizycznej
kopii tej struktury klasy. Ta instancja klasy jest przechowywana z danymi instancji okna. Dowolne
zmiany z danych instancji klasy nie wpływają na oryginalny szablon klasy Koncepcja ta jest później
rozszerzona kiedy różne elementy struktury klasy instancji okna są modyfikowane. Kiedy to wystąpi,
instancja klasy staje się ponownie instancją, a ta nowa instancja wskazuje na oryginalną instancję.
Klasy zarejestrowane działają jak szablony z których mogą być tworzone instancje określonych klas;
w efekcie obiekt ten jest dziedziczony. To dziedziczenia trwa ponieważ zmiany są czynione w
podstawowym sposobie działania tej klasy.
Jeśli nie określisz typu parametru, zakładany jest bieżący kontekst, ponieważ informacja klasy jest
określonym procesem. Nazwa procesu zawsze przesłania moduł o tej samej nazwie Dla wyszukania
modułu kiedy jest konflikt nazw użyj uchwytu modułu (adres bazowy lub selektor bazodanowy
modułu). Również nazwy modułów są zawsze kontekstowe. Jeśli moduł nie jest załadowany w
bieżącym kontekście (lub kontekście CSRSS), polecenie CLASS interpretuje nazwę modułu jako
nazwę klasy.
Dane wyjściowe
Dla każdej klasy jest pokazana następująca informacja :
Class Handle
Offset struktury danych wewnątrz USER. Odnosi się do okna tej
klasy
Class Name
Nazwa ,która została przekazana kiedy klasa była rejestrowana.
Jeśli nie przekazano żadnej nazwy, wyświetlany jest atom.
Owner
Moduł, który ma zarejestrowane tą klasę okna
Window Procedure
Adres procedury okna dla tej klasy okna
Styles
Maska bitowa określonych flag, kiedy klasa była rejestrowana
Przykład
Dla Windows 3.1
Poniższy przykład używa polecenia CLASS do wyświetlenia wszystkich zarejestrowanych klas przez
moduł MSWORD
CLASS msword
Handle
Name
Owner
Windows Procedure
0F24
#32722
USER
TITLEWNDPROC
0EFC
#32771
USER
SWITCHWNDPROC
0ED4
#32769
USER
DESKTOPWNDPROC
0E18
MDIClient
USER
MDICLNTWNDPROC
0DDC
ComboBox
USER
COMBOBXWNDPROC
0DA0
ComboLBox
USER
LBBOXTLWNDPROC
0D64
ScrollBar
USER
SBWNDPROC
0D28
ListBox
USER
LBOXCTLWNDPROC
0CF0
Edit
USER
EDITWNDPROC
Notka: To są symbole dla wszystkich procedur okien, ponieważ SoftICE obejmuje wszystkie
eksportowane symbole z USER.EXE. Jeśli symbol nie jest dostępny dla procedury okna, wyświetla
się adres heksadecymalny.
CLS
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
Alt – F5
Definicja
Czyści okno Poleceń
Składnia
CLS
Użycie
Polecenie CLS czyści okno Poleceń SoftICE i całą wyświetlaną historię , i przesuwa znak zachęty i
kursor do górnego lewego rogu okna Poleceń
CODE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Wyświetlenie bajtów rozkazów
Składnia
CODE [on | off]
Użycie
Polecenie COSE steruje czy lub nie, aktualne bajty szesnastkowe rozkazu są wyświetlane kiedy
rozkaz jest dizasemblowany
*Jeśli CODE jest ON, wyświetlane są bajty rozkazów
*Jeśli CODE jest OFF, nie są wyświetlane bajty rozkazów
*Użycie CODE bez parametrów wyświetla aktualny stan CODE
Domyślnie CODE jest OFF
Przykład
Poniższe polecenie powoduje, ze są wyświetlone aktualne bajty szesnastkowe rozkazu, kiedy rozkaz
ten jest dizasemblowany
CODE on
Zobacz
SET
COLOR
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Wyświetla lub ustawia kolory ekranu
Składnia
COLOR [normalny pogrubiony odwrócony pomoc linia] \ [RESET]
normalny
Atrybut pierwszego planu / tła, który wyświetla zwykły tekst. Domyślnie
=07h szary na czarnym
bold
Atrybut pierwszego planu / tła który wyświetla tekst pogrubiony.
Domyślnie = 0Fh białe na czarnym
odwrócony
Atrybut pierwszego planu / tła który wyświetla tekst w obrazie
negatywowym. Domyślnie = 71h niebieskie na szarym
pomoc
Atrybut pierwszego planu / tła który wyświetla linię pomocy poniżej okna
Poleceń Domyślnie =30h czarne na zielonkawo niebieskim
linia
Atrybut pierwszego planu / tła który wyświetla linie poziomie pomiędzy
oknami SoftICE. Domyślnie = 02h zielone na czarnym
RESET
Resetuje wszystkie kolory do ich domyślnych wartości
Użycie
Użyj polecenia COLOR do ustawienia kolorów ekranu SoftICE na monitorze kolorowym. Każdy z
pięciu określonych kolorów jest bajtem szesnastkowym, gdzie kolor pierwszego planu to bity 0-3 a
kolory tła to bity 4-6. Jest to identyczne ze standardowymi atrybutami CGA w którym jest 16
kolorów pierwszego planu i 8 kolorów tła
Poniższa tablica listuje kolory przedstawiane przez 16 możliwych kodów
Kod
Kolor
Kod
Kolor
0
czarny
A
jasno zielony
1
niebieski
B
jasno zielononiebieski
2
zielony
C
jasno czerwony
3
zielonkawo niebieski
D
jasna magneta
4 czerwony
E
żółty
5 magneta
F
biały
6
brązowy
7
szary
8
ciemno szary
9
jasno niebieski
Przykład
Poniższe polecenie wykonuje następujące przypisanie kolorów
zwykły tekst
szary na białym
tekst pogrubiony
białe na czarnym
tekst w obrazie negatywowym
niebieskie na szarym
linia pomocy
czarne na zielonkawo niebieskim
linia pozioma
zielone na czarnym
COLOR 7 f 71 30 2
CPU
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla rejestry
Składnia
CPU [-i]
-i
wyświetla I/O APIC
Użycie
Polecenie CPU pokazuje wszystkie rejestry CPU (ogólne, sterujące, diagnostyczne i segmentowe)
Dla rodziny Windows NT
Jeśli twój PC zawiera płytę główną wielo procesorową, która używa Zaawansowanego
Programowego Sterownika Przerwań (APIC) I/O, jako sterownika przerwań, polecenie CPU
wyświetli lokalne rejestry CPU i informację o I/O APIC.
Przykład
Poniższy przykład listuje próbkę danych wyjściowych z polecenia CPU pod Windows 9x lub rodziny
Windows NT na systemie który nie używa I/O APIC
Processor
00 Registers
-------------------------------------
CS:EIP = 0008 : 8013D7AE
SS:ESP =0010 :8014AB7C
EAX=00000041 EBX=FFDFF000
ECX=00000041 EDX=80010031
ESI=80147940 EDI=80147740
EBP=FFDFF600 EFL=00000246
DS.=0023
ES=0023
FS=0030
GS=0000
CR0=8000003F PE MP BM TS ET NE PG
CR2=C13401D6
CR3=00030000
CR4=00000011 VME PSE
DR0=00000000
DR1=00000000
DR2=00000000
DR3=00000000
DR6=FFFF0FF0
DR7=00000400
EFL=00000246 PF ZF IF IOPL=0
Poniższy przykład listuje próbkę danych wyjściowych z polecenia CPU pod rodziną Windows NT na
systemie, który używa I/O APIC
Processor
00 Registers
-------------------------------------
CS:EIP = 0008 : 8013D7AE
SS:ESP =0010 :8014AB7C
EAX=00000041 EBX=FFDFF000
ECX=00000041 EDX=80010031
ESI=80147940 EDI=80147740
EBP=FFDFF600 EFL=00000246
DS.=0023
ES=0023
FS=0030
GS=0000
CR0=8000003F PE MP BM TS ET NE PG
CR2=C13401D6
CR3=00030000
CR4=00000011 VME PSE
DR0=00000000
DR1=00000000
DR2=00000000
DR3=00000000
DR6=FFFF0FF0
DR7=00000400
EFL=00000246 PF ZF IF IOPL=0
---------------- Local apic ---------------
ID:
0
Version:
30010
Task Priority:
41
Arbitration Priority:
41
Processor Priority:
41
Destination Format:
FFFFFFFF
Logical Destination:
10000000
Spurious Vector:
11F
Interrupt Command:
3000000:60041
LVT (Timer):
300FD
LVT (Lint0):
1001F
LVT (Lint1):
84FF
LVT (Error):
E3
Timer Count:
3F94DB0
Timer Current:
23757E0
Timer Divide:
B
Poniższy przykład listuje próbkę danych wyjściowych z polecenia CPU –i, pod Windows NT na
systemie używającym I/O APIC
Inti
Vector Delivery
Ststus
Trigger
Dest
Mode
Destination
01
91
Low. Pri
Idle
Edge
Logical 01000000
03
61
Low. Pri
Idle
Edge
Logical 01000000
04
71
Low. Pri
Idle
Edge
Logical 01000000
08
D1
Fixed
Idle
Edge
Logical 01000000
0C
81
Low. Pri
Idle
Edge
Logical 01000000
0E
B1
Low. Pri
Idle
Edge
Logical 01000000
I/O i\unit id register : 0E000000
I/O unit version register: 000F0011
Zobacz
PAGE
CR
OS
Windows 3.1
Typ
Informacja systemowa
Definicja
Wyświetla rejestry sterujące
Składnia
CR
Użycie
Polecenie CR wyświetla zawartość trzech rejestrów sterujących (CR0,CR2 i CR3), i rejestrów
diagnostycznych w oknie Poleceń. CR0 jest rejestrem sterującym procesora. CR2 jest rejestrem w
którym procesor przechowuje najświeższe adresy dostępu, które powodują błąd strony. CR3 zawiera
adres fizyczny katalogu stron systemu.
Przykład
Poniższy przykład listuje próbkę danych wyjściowych z polecenia CR
CR0=8000003B PE MP TS ET NE PG
CR2=000CC985
CR3=002FE000
CR4=00000008 DE
DR1=00000000
DR2=00000000
DR3=00000000
DR6=FFFF0FF0
DR7=00000400
Zobacz
PAGE
CSIP
OS
Windows 3.1
Typ
Punkty przerwań
Definicja
Ustawia kwalifikator zakresu pamięci wskaźnika instrukcji (CS{EIP) dla wszystkich punktów
przerwań
Składnia
CSIP [off | [not] adres startowy adres końcowy |[not] nazwa modułu]
off
Wyłącza kontrolę CSIP
not
Punkt przerwania wystąpi tylko jeśli CS:EIP jest poza określonym
zakresem lub modułem
adres startowy
Początek zakresu pamięci
adres końcowy
koniec zakresu pamięci
nazwa modułu
Jeśli określisz poprawną nazwę modułu Windows zamiast zakresu pamięci
, zakres pokryje cały obszar kodu w określonym module Windows
Użycie
Dla Windows 3.1
Polecenie CSIP warunkuje punkty przerwań aby kod, który wyzwala te punkty przerwań musiał
pochodzić z określonego zakresu pamięci. Funkcja ta jest użyteczna kiedy program jest podejrzewany
o przypadkowe zmodyfikowanie pamięci poza jej granicami. Kiedy zajdą warunki punktu przerwania,
wskaźnik instrukcji (CS:EIP) jest porównywany z określonym zakresem, pamięci. Jeśli wskaźnik
instrukcji jest wewnątrz tego zakresu, aktywuje się punkt przerwania. Dla aktywowania punktu
przerwania kiedy wskaźnik instrukcji (CS:EIP) jest poza zakresem użyj parametru NOT.
Ponieważ 16 bitowy program Windows jest zazwyczaj dzielony na kilka segmentów kodu
rozrzuconych po całej pamięci, możesz wstawić nazwę modułu Windows jako zakres. Jeśli wpiszesz
nazwę modułu, zakres ten pokryje wszystkie segmenty kodu w określonym programie Windows lub
DLL’u. Kiedy określisz zakres CSIP, stosuje się to do WSZYSTKICH punktów przerwań, które
aktualnie są aktywne. Jeśli nie określisz parametrów , wyświetli się bieżący zakres pamięci.
Dla Windows 9x i rodziny NT
CSIP działa tylko na kodzie i modułach 16 bitowych. Dla kodu 32 bitowego, polecenie to jest
przestarzałe. Użyj wyrażeń warunkowych do osiągnięcia tego sposobu działania.
Przykład
Poniższe polecenie powoduje wystąpienie punktu przerwania tylko jeśli CS:EIP NIE jest w ROM
BIOS kiedy zajdą warunki punkt przerwania .
CSIP not $f000: 0 $ffff : 0
Poniższe polecenie powoduje wystąpienie punktu przerwania tylko jeśli spowoduje je program CALC
Windows
CSIP calc
D
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Wyświetlenie / Zmiana pamięci
Definicja
Wyświetlenie pamięci
Składnia
Dla Windows 3.1
D [rozmiar] [adres]
Dla Windows 9x i rodziny Windows NT
D [rozmiar] [-p] [adres [l długość]
rozmiar
Wartość
Opis
B
Bajt (8 bitów)
W
Słowo (16 bitów)
D
Dwusłowo (32 bity)
S
Krótka rzeczywista (32 bity)
L
Długa rzeczywista (64 bity)
T
10 bajtowa rzeczywista (80 bitów)
-p
Wskazuje, ze adres jest fizycznym adresem a nie wirtualnym
adres
Adres początkowy pamięci jaki chcemy wyświetlić
l długość
Wyświetla długość liczby bajtów w oknie Poleceń
Użycie
Polecenie D wyświetla zawartość pamięci spod określonego adresu. SoftICE wyświetla zawartość
pamięci w postaci jaką określiłeś parametrem rozmiar. Jeśli nie określisz rozmiaru, SoftICE użyje
ostatniego określonego rozmiaru. Dla postaci szesnastkowej bajta, słowa i dwusłowa, jest
wyświetlana reprezentacja ASCII.
Polecenie D wyświetla dane albo w aktywnym oknie danych albo jeśli nie ma otartego okna danych,
w oknie Poleceń. Jeśli dana jest wyświetlana w oknie Poleceń, polecenie D wyświetli domyślnie 8
lini danych. Jeśli nie określisz adresu, polecenie wyświetli pamięć spod kolejnego sekwencyjnego
adresu po wyświetlonym ostatnim bajcie w bieżącym oknie Danych . Parametr adres może być
dowolnym adresem wirtualnym w systemie. Dozwolone są przesłonięcia selektora; jeśli nie określisz
sektora jako części adresu , SoftICE użyje ostatniego określonego selektora (w praktyce, ten selektor
może być zazwyczaj zignorowany w środowisku płaskiego adresu) Jeśli musisz wyświetlić adres
fizyczny, możesz użyć przełącznika –p. Przestrzeń adresu fizycznego jest płaska, nie segmentowana,
więc kiedy wyświetlamy adresy fizyczne polecenie D pokaże PHYS: w miejsce selektora.
Jeśli jest określona długość po parametrze L, SoftICE wyświetli wymaganą liczbę bajtów w oknie
Poleceń bez względu na to czy okno Danych jest widoczne. SoftICE zawsze wyświetla całe wiersze.
Jeśli długość doprowadzi do ułamkowych wierszy, SoftICE zaokrągli go. Ta postać polecenia D jest
użyteczna kiedy zrzucamy dużą ilość danych do okna Poleceń w celu zapisania ich w pliku
logowania. Dla wartości zmienno przecinkowych, cyfry wyświetlane są w następującej postaci:
[znak początkowy] cyfry dziesiętne . cyfry dziesiętne E znak wykładnik
Poniższe ciągi ASCII mogą być również wyświetlone dla postaci rzeczywistej:
Ciąg
Wykładnik
Mantysa
znak
Nie Liczba
wszystkie 1-nki
NIE 0
+/-
Denormalne
wszystkie 0
NIE 0
+/-
Niepoprawne
10 bajt tylko z mantysą =0
Nieskończoność wszystkie 1-nki
0
+/-
Przykład
Wyświetla pamięć spod adresu DS.:F1479000 w postaci bajtowej i ASCII
DB ds.: F1479000
Poniższy przykład wyświetla 4KB pamięci startowej spod adresu SS:ESP w postaci dwusłowa. Dana
jest wyświetlona w oknie Poleceń
DD ss:esp l 1000
Poniższe polecenie wyświetla pamięć startową spod adresu fizycznego 1158D000 w postaci słowa.
Zauważ ,że adresy fizyczne są płaskie; nie jest używana wartość selektora
DW –p 1158D000
Zobacz
DATA; WD
DATA
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
Windows 3.1: F12
Definicja
Wyświetla inne okno Danych
Składnia
DATA [numer okna]
Numer okna
Numer okna Danych jaki chcesz obejrzeć. To może być 0,1,2 lub
3.
Użycie
SoftICE wspiera do czterech okien Danych. Każde okno Danych może wyświetlać różne adresu i /
lub formaty. Tylko jedno okno Danych jest widoczne w jednym czasie. Określając DATA bez
parametrów pop prostu przełączamy do następnego okna Danych. Okna są ponumerowane od 0 d0 3.
Liczba ta jest wyświetlana pop prawej stronie lini powyżej okna Danych. Jeśli określisz numer okna
po poleceniu DATA, SoftICE przełączy wyświetlanie tego okna. Polecenie DATA jest najbardziej
użyteczne kiedy jest powiązane z klawiszem funkcyjnym.
Przykład.
Poniższy przykład zmienia widoczne okno Danych na okno Danych o numerze 3
DATA 3
DETACH
OS
Rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Rozłącza środowisko użytkowe ze środowiskiem bieżącym
Składnia
DETACH
Użycie
Kiedy użytkownik „dołączył” do środowiska, środowisko diagnostyczne będzie przesłonięte przez to
zdefiniowane przez „attach”. Kiedy zastosujesz polecenie „detach”, zezwolisz SoftICE wrócić do
trybu automatycznego i wybrać środowisko, które jest stosowne dla pojawienia się SoftICE. Oznacza
to ,ze kontekst adresu i tablice będą automatycznie wybrane w czasie pojawienia się SoftICE.
Przykład
Poniższe polecenie rozłącza środowisko użytkowe z bieżącym środowiskiem
DETACH
DEVICE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetlenie informacji systemowej o urządzeniach w Windows 9x i rodzinie Windows NT
Składnia
DEVICE [nazwa urządzenia | obiekt purządzenia]
nazwa urządzenia
Nazwa katalogu obiektu urządzenia
obiekt purządzenia
Adres obiektu urządzenia
Użycie
Polecenie DEVIXE wyświetla informacje o obiektach urządzeń Windows. Jeśli polecenie DEVICE
jest wprowadzone bez parametrów, wyświetlana jest sumaryczna informacja o wszystkich obiektach
urządzeń znalezionych w katalogu \Device. Jednak. jeśli określony obiekt urządzenia jest wskazany,
albo przez jego nazwę katalogową (nazwa urządzenia) lub adres obiektu (obiekt purządzenia), zostaną
wyświetlone informacje szczegółowe.
Jeśli katalog nie jest określony nazwą urządzenia, polecenie DEVICE próbuje zlokalizować nazwany
obiekt urządzenia w całym drzewie obiektów. Kiedy wyświetlamy informacje o określonym
urządzeniu, polecenie DEVICE wyświetli pola struktury danych DEVICE_OBJECT zdefiniowane w
NTDDK.H
Dane wyjściowe poniższe pola są pokazane jako informacja sumaryczna
RefCnt
Licznik odniesień obiektu urządzenia
DrvObj
Wskaźnik do obiektu urządzenia, do którego należy obiekt urządzenia
NextDrv
Wskaźnik do kolejnego obiektu urządzenia na dołączonej liście obiektów
urządzeń, które zostały stworzone przez ten sam sterownik
AttDev
Wskaźnik do obiektu urządzenia, które zostało dołączone do
wyświetlonego obiektu poprzez funkcję IoAttachDeviceObject. Dołączone
obiekty urządzeń są w gruncie rzeczy filtrami IRP dla tych urządzeń do
których są przyłączone.
CurIrp
Wskaźnik do IRP aktualnie służącemu obiektowi urządzenia poprzez
sterownik obiektu urządzenia.
DevExten
Wskaźnik do sterownika urządzenia zdefiniowanego obiektu urządzenia
rozszerzonej struktury danych
Name
Nazwa urządzenia, jeśli ma
Poniżej jest kilka pół pokazywanych kiedy jest wyświetlana informacja szczegółowa
Flags
Definicja atrybutów obiektu urządzenia takich jak czy wykonanie I/O
Na tym urządzenie jest buforowane czy nie
Vpb
Wskaźnik do urządzenia powiązanego wolumenem parametru bloku
Device Type
Wartość zdefiniowana przez użytkownika lub predefiniowana, którą
SoftICE tłumaczy na nazwę
Przykład
Poniższy przykład pokazuje dane wyjściowe polecenia DEVICE bez parametrów.. Prowadzi to do
wyświetlenia przez SoftICE informacji sumarycznej o wszystkich obiektach urządzeń w katalogu
obiektów \Device
DEVICE
RefCnt
DrvObj
NextDrv
AttDev
CurIrp
DevExten
Name
00000000
FD8CD910
00000000
00000000
00000000
FD8CD869
Beep
00000015
FD89E730
00000000
00000000
00000000
FD89C968
NwlnkIpx
00000001
FD892170
00000000
00000000
00000000
FD8980E8
nETBIOS
00000000
FD89D730
00000000
00000000
00000000
FD897D68
Ip
00000001
FD8CBB70
00000000
00000000
FD8DAA08
FD8CAF88
KeybClass0
00000001
FD8C9F30
00000000
00000000
00000000
FD8C60F0
Video0
00000001
FD8C9C90
00000000
00000000
00000000
FD8C50F8
Video1
00000001
FD8CC530
00000000
00000000
FD8DAC08
FD8CBF88
PointerClas0
00000001
FD8DB550
FD8D3030
00000000
00000000
FD8D3FC8
RawTape
00000007
FD89D730
FD897CB0
00000000
00000000
FD897C48
Tcp
00000001
FD88A990
00000000
00000000
00000000
FD88A8A8
ParallelPort0
00000003
FD8B3730
00000000
00000000
00000000
FD8A40E8
NE20001
Poniższy przykład używa polecenia DEVICE z nazwą obiektu urządzenia BEEP.
DEVICE beep
RefCnt
DrvObj
NextDrv
AttDev
CurIrp
DevExten
Name
00000000
FD8CD910
00000000
00000000
00000000
FD8CD868
Beep
Timer*
: 00000000
Flags
: 00000044 DO_BUFFERED_IO |
DO_DEVICE_HAS_NAME
Characteristics
: 00000000
Vpb*
: 00000000
Device Type
: 1
StackSize
: 1
&Queue
: FD8CD7E4
AlignementRequirement
: 00000000 FILE_BYTE_ALIGNEMENT
&DeviceQueue
: FD8CD810
&Dpc
: FD8CD824
ActiveThreadCount
: 00000000
SecurityDescriptor*
: E10E2528
&DeviceLock
:FD8CD84C
SectorSize
: 0000
Spare1
: 0000
DeviceObjectExtn*
: FDCD8B8
Reserved*
: 00000000
DEX
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Wyświetla lub przydziela wyrażenia okna Danych
Składnia
DEX [numer okna danych [wyrażenie]]
numer okna danych
Numer od 0 do 3 wskazujący jakie okno Danych jest używane.
Liczba ta jest wyświetlana po prawej stronie lini powyżej okna
Danych
wyrażenie
wyrażenie danych przydzielone do okna Danych
Użycie
Polecenie DEX przydziela wyrażenie danych do dowolnego z czterech okien Danych SoftICE. Za
każdym razem kiedy pojawia się SoftICE, wyrażenia są ponownie obliczane a pamięć spod tej
lokacji wyświetlona we właściwym oknie Danych. Jest to użyteczne dla wyświetlania zmienionych
komórek pamięci gdzie zawsze jest wskaźnik do pamięci albo w rejestrze albo zmiennej. Dane są
wyświetlane w aktualnym formacie okna Danych: albo bajcie, słowie dwusłowie , krótkiej
rzeczywistej, długiej rzeczywistej lub 10 bajtowej rzeczywistej. Jest to to samo co wpisywanie
wyrażeń polecenia D za każdym pojawieniem się SoftICE.
Jeśli wpiszesz DEX bez parametrów, wyświetli wszystkie wyrażenia bezpośrednio z tym oknem
Danych.
Dla rozłączenia wyrażenia od okna Danych, wpisz DEX z następującym po nim numerze okna a
potem naciśnij Enter.
Dla cyklicznego przechodzenia przez cztery okna Danych użyj polecenia DATA
Przykład
Za każdym pojawieniem się SoftICE, okno Danych 0 zawiera zawartość stosu
DEX 0 ss:esp
Za każdym pojawieniem się SoftICE, okno Danych 1 zawiera zawartość pamięci wskazywanej przez
zmienną publiczną PointerVariable
DEX 1 @pointervariable
Zobacz
DATA
DIAL
OS
Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Przekierowuje konsolę do modemu
Składnia
DIAL [on[ port com][szybkość transmisji][i = ciąg inic.][p= numer] | off]
port com
Jeśli nie jest określony żaden port, domyślnym jest COM1
szybkość transmisji
Szybkość transmisji używana do komunikacji modemu. Domyślnie to
38400. Prędkości jakie możesz określić to 1200, 2400, 4800, 9600, 19200,
23040, 28800, 38400, 57000 i 115000
i= ciąg inic
Opcjonalny ciąg inicjalizujący modemu
p = numer
Numer telefonu
Użycie
Polecenie DIAL wszczyna wywołanie maszyny zdalnej poprzez modem. Maszyna zdalna musi mieć
uruchomiony SERIAL32.EXE (SSERIAL.EXE na maszynie z MS DOS) i oczekiwać na wywołanie.
Kiedy połączenie jest nawiązane, dana wejściowa SoftICE jest odbierana ze zdalnej maszyny a dana
wyjściowa SoftICE jest wysyłana do zdalnej maszyny. Żadna dana wejściowa nie jest akceptowana z
maszyny lokalnej z wyjątkiem sekwencji skrótu klawiaturowego pojawienia się SoftICE. Możesz
określić ciąg inicjalizujący modemu i numer telefonu wewnątrz ustawień konfiguracyjnych SoftICE,
aby te określone ciągi stały się domyślnymi dla parametrów lini poleceń i i p. Na maszynie zdalnej,
możesz użyć polecenia SERIAL dla określenia portu com, szybkości transmisji i parametrów
inicjalizujących dla SERIAL.EXE .
Przykład
Poniżej mamy przykład polecenia DIAL
DIAL on 2 19200 i =atx0 p =9, 555 – 5555,,, 1000
Polecenie to mówi SoftICE aby najpierw zainicjalizował modem na porcie com 2 z szybkością
transmisji 19200 z ciągiem „atx0” a potem wykonał wywołanie poprzez modem na numer telefonu 9-
555-5555 z rozszerzeniem 1000. Przecinki mogą być użyte, jak w tradycyjnym programie modemu,
dla wprowadzenia opóźnienia do sekwencji wywołania.
Poniższy przykład pokazuje oczekiwaną składnię przez SERIAL.EXE kiedy uruchamia go na zdalnej
maszynie aby odpowiedział na polecenie DIAL z maszyny lokalnej
SERIAL on [port com] [szybkość transmisji] i „ciąg inicjalizujący”
Poniższe polecenie SERIAL.EXE używa ciągu inicjalizującego modemu „atx0” do odpowiedzi na
wywołanie (przy 192000 bps) przez modem na porcie szeregowym COM 1 maszyny zdalnej. Linia
poleceń jest wprowadzona na maszynie zdalnej
SERIAL on 1 19200 i”atx0”
Kiedy zdalna sesja diagnostyczna jest zakończona, wprowadź polecenie DIAL OFF ze zdalnej
maszyny dla zakończenia sesji diagnostycznej i rozłączenia modemu. Poniższe przykłady ciągów
inicjalizujących Dial i numeru telefonu w ustawieniach konfiguracyjnych Remote Debugging
SoftICE:
Dial initialization string: atx
Telephone number string: 9,555-5555,,,1000
Z tym ciągiem inicjalizującym, SoftICE zawsze zainicjalizuje modem określonym w poleceniu DIAL
ciągiem „ATX0” chyba ,że polecenie DIAL wyraźnie określi inny numer telefonu
Zobacz
ANSWER, SERIAL
DPC
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla Opóźnione Wywołanie Procedury
Składnia
DPC [adres]
Adres
Lokacja opóźnionego wywołania procedury
Użycie
Polecenie DPC wyświetla informację o opóźnionych wywołaniach procedury, które są aktualnie w
systemie. Jeśli wpiszesz DPC bez parametrów, SoftICE wylistuje wszystkie opóźnione wywołania
procedur, które są skolejkowane dla dostarczenia w systemie.
Przykład
Poniższe polecenie wyświetla wylistowane wszystkie opóźnione wywołania procedur aktualnych w
systemie.
DPC
Zobacz
APC
DRIVER
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o sterownikach Windows 9x i rodziny Windows NT
Składnia
DRIVER [nazwa sterownika [ obiekt pdriver]
nazwa sterownika
Nazwa katalogu obiektu dla sterownika
obiekt pdriver
Adres obiektu sterownika
Użycie
Polecenia DRIVER wyświetla informacje o sterownikach Windows 9x i rodziny Windows NT. Jeśli
polecenie to jest wprowadzone bez parametrów, pokazana jest informacja sumaryczna dla wszystkich
sterowników znalezionych w katalogu \Driver. Jednak, jeśli jest wskazany określony sterownik, albo
przez nazwę katalogową obiektu (nazwa sterownika) albo przez adres obiektu (obiekt pdriver),
zostanie wyświetlonych więcej informacji.
Jeśli katalog nie jest określony nazwą sterownika , polecenie DRIVER próbuje zlokalizować nazwany
sterownik w całym drzewie obiektów. Kiedy jest wyświetlana szczegółowa informacja o określonym
sterowniku , polecenie DRIVER wyświetla pole struktury danych DRVER_OBIECT jako
zdefiniowane w NTDDK.H
Dane wyjściowe Poniższe pola są pokazane jako informacja sumaryczna:
Start
Podstawowy adres sterownika
Size
Rozmiar obrazu sterownika
DrvSect
Wskaźnik do struktury modułu sterownika
Count
Ile razy zarejstrpowany podprogram reinicjalizujący wywołano dla tego
Sterownika
DrvInit
Adres podprogramu sterownika DriverEntry
DrvStaIO
Adres podprogramu sterownika StartIo
DrvUnld
Adres podprogramu sterownika Unload
Name
Nazwa sterownika
Poniżej pokazano kiedy jest pokazywana informacja szczegółowa:
DeviceObject
Wskaźnik do pierwszego obiektu urządzenia na dołączonej liście
sterowników, obiektów urządzeń, które są ich właścicielami.
Flags
Pole jest bitem maski sterownika flag. Jedyną aktualnie udokumentowaną
flagą jest DRVO_UNLOAD_INVOKED
FastIoDispatch
Wskaźnik do struktury danych szybkiego przydzielania I/O sterownika,
jeśli ma jeden. File System Drivers zazwyczaj ma zdefiniowany dla siebie
podprogram szybkiego I/O. Informację o tej strukturze można znaleźć w
NTDDK.H
Handler Addresses
Po zainicjalizowaniu, sterownik może zarejestrować uchwyty, które są
wywołane kiedy sterownik odbiera określony typ żądania IRP. Każdy
uchwyt adresu jest listowany wraz z główną funkcją IRP przetwarzaną dla
sterownika.
Przykład
Poniższy przykład pokazuje dane wyjściowe polecenia DRIVER bez parametrów. Prowadzi to do
wydrukowania przez SoftICE informacji sumarycznej dla wszystkich sterowników w katalogu
obiektów \Driver
DRIVER
Start
Size
DrvSect
Count
DrvInit
DrvStaIo
DrvUnld Name
FB030000 00000E20 FD8CDA88
00000000
FB0302EE
FB0305E8
FB0306E2 Beep
FB130000 0000D2A0 FD89E8C8
00000000
FB13B7BF
00000000
FB136789 NwlnkIpx
FB050000 00002320 FD8CD1A8
00000000
FB050AF2
FB0508BE
00000000 Mouclass
FB060000 00002320 FD8CBC48
00000000
FB060AF2
FB0608C0
00000000 Kbdclass
FB070000 00003860 FD8CAE48
00000000
FB070B0C
00000000
00000000 VgaSave
Poniżej jest przykład polecenia DRIVE z nazwą obiektu sterownika BEEP.SYS jako parametr. Na
listingu tym można zobaczyć ,że sterownik pierwszego obiektu urządzenia to FD8CD7B0h i że ma
zarejestrowane 4 podprogramy obsługi IRP
DRVER beep
Start
Size
DrvSect
Count
DrvInit
DrvStaIo
DrvUnld
Name
FB030000
00000E20
FD8CDA88
00000000
FB0302EE
FB0305E8
FB0306E2
Beep
DeviceObject*
: FD8CD7B0
Flags
: 00000000
HardwareDatabase
:
\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM
FastIoDispatch
: 00000000
IRP_MJ_CREATE
at 8: FB03053C
IRP_MJ_CLOSE
at 8 : FB03058A
IRP_MJ_DEVICE_CONTROL
at 8 : FBO304C6
IPR_MJ_CLEANUP
at 8: FB030416
E
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Wyświetlanie / Zmiana pamięci
Definicja
Edycja pamięci
Składnia
E [rozmiar] [adres] [lista danych]
rozmiar
Wartość
Opis
B
Bajt
W
Słowo
D
Dwusłowo
S
Krótka rzeczywista
L
Długa rzeczywista
T
Rzeczywista 10 bajtowa
adres
lista danych
Lista obiektów danych określonego rozmiaru (bajty, słowa
dwusłowa, krótkie rzeczywiste, długie rzeczywiste lub 10 bajtowe
rzeczywiste) lub ciągi w cudzysłowach oddzielone przecinkami
lub spacjami. Ciągi w cudzysłowach mogą być ograniczone
pojedynczym znakiem (‘) lub cudzysłowem
Użycie
Jeśli nie określisz listy danych , kursor przesunie się do okna Danych, gdzie możesz wyedytować
Pamięć na właściwym miejscu. Jeśli określisz listę danych, pamięć ta jest bezpośrednio zmieniona na
nową wartość. Jeśli okno Danych nie jest aktualnie widoczne, jest automatycznie czynione
widocznym. Zarówno tryb edycji ASCII i szesnastkowy są obsługiwane. Do przełączania pomiędzy
wyświetlanym obszarem ASCII a szesnastkowym, naciśnij klawisz Tab. Jeśli nie określisz rozmiaru,
zostanie zastosowany rozmiar ostatni
Wprowadź poprawne liczby zmienno przecinkowe w następującym formacie:
[znak początkowy] cyfry dziesiętne . cyfry dziesiętne E znak wykładnik
Przykład: poprawna liczba zmienno przecinkowa to –1.123456 E –19
Przykład
Poniższe polecenie przesuwa kursor do okna Danych dla edycji,. Adres początkowy w oknie Danych
to DS.:100h, a dane są wyświetlane zarówno w bajtowym formacie szesnastkowym jak i ASCII.
Początkowym trybem edycyjnym jest szesnastkowy
EB ds.:1000h
Kolejne polecenie przesuwa ciąg ASCII zakończony zerem ‘Test String’ do pamięci pod lokację
DS.:1000h
EB ds.:1000h ‘Test String’, 0
To polecenie przesuwa krótką liczbę rzeczywistą 3.1415 do komórki pamięci DS.:1000h
EB ds.: 1000
3.1415
EC
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
F6
Definicja
Wprowadza lub zamyka okno Kodu
Składnia
EC
Użycie
Polecenie EC przełącza kursor miedzy oknem Kodu a oknem Poleceń::
*Jeśli kursor jest w oknie Poleceń, jest przesuwany do okna Kodu
*Jeśli kursor jest w oknie Kodu, przesuwa go do okna Poleceń
*Jeśli okno Kodu nie jest widoczne kiedy polecenie jest wpisywane, jest czynione widocznym
Kiedy kursor jest w oknie Kodu, staje się dostępnym kilka opcji, które czynią diagnostykę dużo
łatwiejszą. Opcje te to:
*Ustawienie punktu przerwania „wskaż i wybierz”
Ustawia go z poleceniem BPX. Jeśli nie określisz parametrów polecenia BPX (klawisz domyślny
F9), ustawiony jest punkt przerwania wykonania pod lokacją pozycji kursora oknie Kodu
*Pójście do lini kursora
Ustawia czasowy punkt przerwania spod lini kursora i zaczyna wykonywanie z poleceniem HERE
(klawisz domyślny F7).
*Przesuwanie okna Kodu
Klawisze przewijania (Strzałka w Górę, Strzałka w Dół, PageUp i PageDn) są przedefiniowane
podczas gdy kursor jest w oknie Kodu:
*Strzałka w Górę: Przewija okno Kodu w górę o jedną linię
*Strzałka w Dół: Przewija okno Kodu w dół o jedną linię
*PageUp: Przewija okno Kodu w górę o jedno okno
*PageDn: Przewija okno Kodu w dół o jedno okno
Tylko tryb źródła
W trybie źródła, możesz przewijać okno Kodu do okna Poleceń używając klawisza CTRL z jednym z
klawiszy kursora opisanych powyżej. W trybie tym, poniższe klawisze mają specjalne znaczenie:
*Ctrl – Home; Przesuwa do lini 1 bieżącego pliku źródłowego
*Ctrl – End; Przesuwa do ostatniej lini bieżącego pliku źródłowego
Notka: poprzednie klawisze działały tylko dla wyświetlania źródła, nie dla instrukcji
zdisasemblowanych
*Ctrl – Strzałka w Prawo: Przewija poziomo w prawo kod źródłowy
*Ctrl – Strzałka w Lewo: Przewija poziomo w lewo kod źródłowy
ERESOURCE
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o zasobach synchronizacji zawartych w ExpsystemResourceList
Składnia
ERESOURCE [-a | -c | -w | adres]
-a
Wyświetla zasoby, które są czynie przetrzymywane przez wątek
-c
Wyświetla zasoby, które są lub mają być zawarte (gdzie licznik zawartości > 0)
-w
Wyświetla zasoby, które mają wątki aktualnie oczekujące na nie
adres
Adres struktury ERESOURCE
Użycie
Polecenie to wyświetla strukturę ERESOURCE, listę wątków, których aktualnym właścicielem jest
ERESOURCE, i listę wątków, które oczekują na ERESOURCE. Kiedy nie określisz adresu, SoftICE
wyświetla informację sumaryczną o każdej strukturze ERESOURCE w ExpSystemResourceList
Przykład
Wprowadź następujące polecenie aby wyświetlić listę aktywnych zasobów w swoim systemie
ERESOURCE -a
Możesz wprowadzić następujące polecenie dla uzyskania rozszerzonej informacji o określonej
strukturze ERESOURCE, obejmującej zawartość wątków i wątki oczekujące na ERESOURCE
ERESOURCE adres
Możesz użyć tej informacji uzyskanej z powyższego polecenia w połączeniu z następującym
poleceniem pomagającym znaleźć blokadę.
ERESOURCE –w
Zobacz
KEVENT; KSEM ; THREAD
EVENT
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla zdarzenia BoundChecker’a®
Składnia
EVENT [-? | -a | -d | -lx | -nd | -o | -pd | -r | -s | -t | -x] [indeks startowy zdarzenia [L licznik zdarzeń]]
-?
Wyświetla opisy przełączników obsługiwanych poleceń
-a
Wyświetla włączanie lub wyłączanie zwracanych API. Ustawieniem domyślnym
jest włączony. Kiedy jest wyłączone, SoftICE nie wyświetla zwracanych zdarzeń
API .
-d
Listuje wszystkie aktualnie monitorowane sterowniki przez BoundChecker’a.
Wpisz EVENT –d w lini poleceń SoftICE aby zobaczyć listing tych sterowników
i ich całkowite zliczenie.
-lx
Określa poziom sprawdzania stosu (0x40 – 0x4000) . Domyślnym ustawieniem jest
0x800
-nd
Określa głębokość zagnieżdżenia używanych do wyświetlenia zaradzeń. Poprawne
wartości to 0 do 32 (dziesiętnie). Domyślnym poziomem zagnieżdżenia jest 10.
Jeśli głębokość zagnieżdżenia wcześniejszego zdarzenia przekroczyła określoną
głębokość zagnieżdżenia, SoftICE ich jako wcięcia
-o
Włącza lub wyłącza logowanie zdarzeń. Domyślnym ustawieniem jest włączony
-pd
Określa poziom pojawiania się SoftICE dla zdarzeń BoundsChecker’a. Domyślnym
ustawieniem jest 0
0 – SoftICE nie pojawia się przy zdarzeniach BoundsChecker’a
1- SoftICE pojawia się tylko przy błędach
2- SoftICE pojawia się przy wszystkich błędach i ostrzeżeniach
-r
Czyści bufor zdarzeń
-s
Wyświetla bieżący status zdarzenia podglądanego lub logowanego. Liczba
zalogowanych zdarzeń jest liczbą całkowitych śledzeń od czasu startu systemu.
Wyświetlany jest w formacie dziesiętnym.
-t
Włącza lub wyłącza wyświetlanie przełączników wątków. Domyślnym ustawieniem
jest włączony. Kiedy ta opcja jest włączona a zdarzenie n-1 jest w innym wątku niż
zdarzenie n, SoftICE wyświetli zdarzenie n w obrazie negatywowym wskazującym
wystąpienie przełącznika wątków. Kiedy ta opcja jest wyłączona, SoftICE nie
wyświetli
-x
Wyświetla wszystkie zdarzenia z ich parametrami , jak również ogólną informację
sumaryczną dla każdego zdarzenia, obejmującą czas zajęcia procesora,, bieżący
wątek i aktualny IRQL. Jeśli nie określisz tego przełącznika, SoftICE wyświetli
pojedynczą sumaryczną linię dla każdego zdarzenia
indeks startowy
zdarzenia
Wyświetla zdarzenia startujące pod określonym indeksem zdarzenia
L licznik zdarzeń Wyświetla zalogowane zdarzenia w oknie Poleceń, poczynając od określonego
indeksu startowego zdarzenia dla długości zdarzenia licznika zdarzenia. Jeśli nie
określisz długości ,SoftICE wyświetli te zdarzenia w przewijalnym oknie
zaczynając od indeksu startowego zdarzenia (jeśli jest określony)
Użycie
Użyj polecenia EVENT do wyświetlenia informacji o zdarzeniach BoundsChecker’a. Możesz
wyświetlić informacje zdarzeń w oknie Zdarzenia lub w oknie Poleceń.
Podgląd zdarzeń w oknie Zdarzeń
Możesz określić czy SoftICE wyświetli te zdarzenia w oknie Zdarzeń jako informację sumaryczną
lub szczegółową. Kiedy okno Zdarzeń jest otwarte, możesz użyć F1 do rozwinięcia lub zwinięcia
zdarzeń. Możesz umieścić kursor w lini i podwójnie kliknąć lub nacisnąć Enter do rozwinięcia lub
zwinięcia pojedynczego zdarzenia. Okno Zdarzeń obsługuje następujące klawisze
Enter
Przełącza stan wyświetlania zdarzenia spod bieżącej pozycji kursora
pomiędzy informacją sumaryczną a szczegółową
Esc
Zamyka okno Zdarzeń. Kiedy je otworzysz ponownie, SoftICE zachowa
poprzedni stan okna (tj. bieżące zdarzenie, stan rozszerzenia a filtry są
takie same)
PageUp
Przewija ekran jedną stronę w górę
PageDown
Przewija ekran jedną stronę w dół
Strzałka w górę
Przenosi kursor jedną linię w górę. Jeśli jest na lini szczytowej, przewija
okno w górę o jedną linię
Strzałka w dół
Przenosi kursor jedną linię w dół. Jeśli jest na dolnej lini, przewija okno o
jedną linię w dół
Shift strzałka w lewo
Przewija okno w lewo o jedną kolumnę
Shift strzałka w prawo
Przewija okno w prawo o jedną kolumnę
Home
Przenosi kursor do górnego wiersza. Jeśli kursor jest już w górnym wierszu
zaczyna wyświetlanie od pierwszego zdarzenia.
End
Przenosi kursor do dolnego wiersza. Jeśli kursor jest już na dole, zaczyna
wyświetlanie od ostatniego zdarzenia.
*
Cofa ostatnie operacje Home i End
F1
Przełącza stan wyświetlania wszystkich zdarzeń pomiędzy informacją
sumaryczną a szczegółową
F2
Wyświetla okienko filtrowania Zdarzeń
F3
Wyświetla okienko filtrowania Parameter
F4
Wyświetla tylko błędy zdarzeń
F
Zamyka okno Zdarzeń i zwraca koncentrację do okna Poleceń. Użyj tego
klawisza jeśli chcesz użyć innego polecenia SoftICE na danych, która jest
wyświetlona w oknie Zdarzeń. Jeśli chcesz zaktualizować ponownie okno
Zdarzeń, SoftICE zachowuje poprzedni stan okna (tj. bieżące szczytowe
zdarzenie, stan rozszerzenia a filtry są takie same)
R
Przełącza stan wyświetlania zwracanych API pomiędzy pokazaniem
wszystkich zwracanych API i nie pokazuje zwracanych API
T
Przełącza wyróżnione przełączniki wątków. Przełącznik wątków są
wskazywane przez wyświetlenie lini sumarycznej pierwszego zdarzenia w
tym nowym wątku w obrazie negatywowym.
E
Przełącza wyróżnione błędy zwracanych API .SoftICE wyświetla linię
sumaryczną zwracanych błędów API
S
Wyświetla zdarzenie pod bieżącą pozycją kursora na górze okna Zdarzeń
N
Znajduje kolejne zdarzenie, które jest dopasowane do szukanych kryteriów
zaznaczonych prawym klawiszem myszy.
P
Znajduje poprzednie zdarzenie, które jest dopasowane do szukanych
kryteriów zaznaczonych prawym przyciskiem myszy
0-7
Filtrowanie zdarzeń przez liczbę CPU na maszynach SMP. Każdy klawisz
działa jak przełącznik dla wyświetlenia wszystkich zdarzeń, które
wystąpiły na określonym CPU. Klawisze te pojawiają się jako przyciski w
górnej lini okna Zdarzeń.
Podgląd zdarzeń w oknie Poleceń
W oknie Poleceń, SoftICE może wyświetlić dowolną liczbę zdarzeń poczynając od określonego
indeksu zdarzenia. SoftICE może wyświetlić zdarzenia z informacją sumaryczną lub szczegółową.
Wyświetlenie sumaryczne obejmuje tylko pojedynczą linię dla każdego zdarzenia. Wyświetlenie
szczegółowe obejmuje informację sumaryczną , jak również parametry zdarzenia. Możesz użyć
polecenia EVENT do przełączenia ustawień danych wyjściowych wyświetlania. Pożytecznym jest
oglądanie zdarzeń w oknie Poleceń, kiedy chcesz oglądać mała grupę funkcji, lub kiedy chcesz
zachować dane zdarzenie w pliku historii SoftICE. Plik historii SoftICE zawiera bieżącą zawartość
bufora historii SoftICE .Możesz użyć paska przewijania w oknie Poleceń do oglądania zawartości
bufora historii SoftICE
Przykład
Wpisz poniższe polecenie w lini poleceń dla wyświetlenia zdarzeń w oknie Zdarzeń
EVENT
Kiedy nie określisz indeksu startowego zdarzenia lub licznika zdarzeń, SoftICE wyświetli okno
Zdarzeń w miejsce okna Poleceń. Możesz użyć tego polecenia z jednym z przełączników polecenia
EVENT lub indeksem startowym zdarzenia dostosowującym wyświetlanie. Wpisz poniższe polecenie
w lini poleceń dla wyświetlenia zdarzeń w oknie Poleceń zaczynając indeksu startowego zdarzenia
dla długości zdarzenia lub licznika zdarzeń zdarzenia
EVENT indeks startowy zdarzenia L licznik zdarzenia
Zobacz
EVMEM
EVMEM
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o zdarzeniach pamięci BoundsChecker’a
Składnia
EVMEM [-? | -d | -t | -s | -p | -o | -e] [tag | nazwa sterownika | typ puli]
-?
Wyświetla opis obsługiwanych przełączników poleceń
-d
Sortuje dane wyjściowe przez nazwę sterownika
-t
Sortuje dane wyjściowe przez znacznik (tag)
-s
Sortuje dane wyjściowe przez rozmiar
-p
Sortuje dane wyjściowe przez typ puli
-o
Wyświetla przegląd informacji
-e
Wyświetla tylko błędy zdarzeń
tag
Wyświetla tylko zdarzenia pamięci, które zostały zaalokowane z określonym
znacznikiem. Znaczniki są 4 bajtowymi ciągami ASCII, które są przekazywane do
dwóch API ExAllocatePoolWithTag
nazwa sterownika Wyświetla zdarzenia pamięci tylko dla określonego sterownika
typ puli
Wyświetla tylko zdarzenia pamięci zaalokowane poza określoną pulą. Poniższe
wartości są poprawne
NPP
Pula nie stronicowana
PP
Pula stronicowana
NPPMS
Pula nie stronicowana, musi się powieść
NPPCA
Pula nie stronicowana wyrównanie do cache’a
PPCA
Pula stronicowana wyrównanie do cache’a
NPPCAMS
Pula nie stronicowana wyrównanie do cache’a, musi się
Powieść
MMC
Alokowane przez API MMAllocateContiguousMemory
MMNC
Alokowane przez API MMAllocateNonCachedMemory
Użycie
Użyj polecenia EVMEM do wyświetlenia informacji o zdarzeniach pamięci BoundsChecker’a w
oknie Poleceń. Dla wyświetlenia informacji o wszystkich typach zdarzeń, użyj polecenia EVENT
Przykład
Wpisz poniższe polecenie w lini poleceń dla wyświetlenia zdarzeń pamięci w oknie Poleceń
EVMEM
Możesz użyć przełączników polecenia EVMEM dla ustawienia wyświetlania obejmujących
sortowanie danych wyjściowych i wyświetlenie informacji dodatkowej. Wpisz poniższe polecenie w
lini poleceń do wyświetlenia zdarzeń w oknie Poleceń dla nazwy sterownika
EVMEM nazwa sterownika
Zobacz
EVENT
EVRES
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla zasoby zgromadzone przez sterownik BCHKD.SYS BoundsChecker’a
Składnia
EVRES[Typ procesu | typ obiektu | typ sterownika]
Typ procesu
Typ procesu jest nazwą procesu, PID lub adresem PCB. Jeśli jedno jest określone
, tylko obiekty stworzone w tym procesie będą wyświetlane. Użyj tej wersji
polecenia do wyświetlenia tylko obiektów stworzonych w procesie systemowym:
EVRES system
Typ obiektu
Typ obiektu jest jednym z następujących:
KEY
DIRECTORY
INTERRUPT
FILE
SECTION
EVENT
Odnosi się to do typów obiektów gromadzonych przez BCHKD. Jeśli jeden jest
określony, tylko te obiekty które wpisano będą wyświetlone. Użyj tej wersji
polecenia do wyświetlenia dla wyświetlenia obiektów przerwań:
EVRES przerwania
Typ sterownika Typ sterownika jest nazwą sterownika, Jeśli jeden jest określony, tylko zasoby
stworzone przez ten sterownik będą wyświetlane. Użyj tej wersji polecenia do
wyświetlenia zasobów stworzonych przez sterownik netbios :
EVRES netbios
Notka: Jeśli nie wpisano żadnych parametrów, będą wyświetlone wszystkie zasoby.
Dla każdego przechwyconego zasobu , poniższa informacja będzie wyświetlona:
*Handle – jest to uchwyt obiektu tego zasobu. Dla obiektu przerwania, jest to adres struktury obiektu
przerwania.
*Process - jest to nazwa procesu i id procesu gdzie został stworzony zasób
*Obj Type – jest to jeden z typów obiektów wylistowanych powyżej
*Name – jest to nazwa zasobu. Dla obiektów przerwań, jest to numer wektoru przerwania i adres
podprogramu obsługi przerwania
*EIP1 – jest to adres w sterowniku, który stworzył ten zasób. Jeśli dostępna jest nazwa symboliczna,
będzie wyświetlona; w przeciwnym razie będzie wyświetlony adres i nazwa
sterownika plus offset
*EIP2 – jest to drugi poziom adresu zwrotnego na stosie. Jeśli jest dostępna nazwa symboliczna,
będzie wyświetlona; w przeciwnym razie będzie wyświetlony będzie adres, nazwa
sterownika plus offset
Użycie
Użyj polecenia EVRES do wyświetlenia zasobów zgromadzonych przez sterownik BCHKD.SYS
BoundsChecker’a
Przykład
Poniżej mamy próbkę danych wyjściowych z polecenia EVRES
Handle
Process (PID)
Obj Type
Name
8147A68
System (08)
INTERRUPT
Vec:51 ISR : ED0907A5
EIP1: ED092F20 serial!PAGERP0 + 0720
EIP2: 00000000
8147AA28
System (08)
INTERRUPT
Vec:A2 ISR:ED0907A5
EIP1; ED092F20 serial!PAGERP0+ 0720
EIP2: 00000000
8147B008
System (08)
INTERRUPT
Vec:52 ISR:ED086D10
EIP1:ED083526 i8042prt!PAGE+0406
EIP2:ED0844F1 i804prt!PAGE+13D1
8155C628
System (08)
INTERRUPT
Vec: B3 ISR ED0810CC
EIP1: ED08360D i804prt!PAGE+04ED
EIP2:ED0844DA i8042prt!PAGE+13BA
8155C008
System (08)
INTERRUPT
Vec: 93 ISR:ED3124BC
EIP1: ED316d70 uhcd!PAGE+0B50
EIP2: ED310FB3 uhcd!.text+0CD3
81579008
System(08)
INTERRUPT
Vec:83 ISR:BFEB591
EIP1: BFEC360B
NDIS!NdisInitializeInterrupt+0179
EIP2: BFEC348B
NDIS!NdisMRegisterInterrupt+0035
818AB008
System (08)
INTERRUPT
Vec: 92 ISR: BFF27E28
EIP1: BFF300C4 atapi!PAGE+0AA4
EIP2: BFF2FF37 atapi!PAGE+0917
818AB408
System(08)
INTERRUPT
Vec:92 ISR:BFF27E28
EIP1: BFF300C4 atapi!PAGE+0AA4
EIP2: BFF2FF37 atapi!PAGE+0917
818ABC68
System (08)
INTERRUPT
Vec: 72 ISR:BFF27E28
EIP1: BFF300C4 atapi!PAGE+0AA4
EIP2: BFF2FF37 atapi!PAGE+0917
818AB008
System(08)
INTERRUPT
Vec: 71 ISR:BFF27E28
EIP1: BFF300C4 atapi!PAGE+0AA4
EIP2: BFF2FF37 atapi!PAGE+0917
814D5008
System(08)
INTERRUPT Vec:B1 ISR:
BFF7F44Av
EIP1: BFF8FF8E ACPI!PAGE+08CE
EIP2:BFF97403 ACPI! PAGE+7D43
Total Resource Objects:
10
Zobacz
EVENT; EVMEM
EXIT
OS
Windows 3.1
Typ
Sterowanie przepływem
Definicja
Wymusza zamknięcie bieżącego programu MS-DOS lub Windows 3.1
Składnia
EXIT
Użycie
Polecenie EXIT próbuje przerwać bieżący program MS-DOS lub Windows 3.1 przez wymuszenie
DOS’owej funkcji zamknięcia (INT 21h, funkcja 4Ch). Polecenie to działa tylko jeśli MS-DOS jest w
stanie gdzie jest dostępna akceptacja wywołania funkcji zamknięcia. Jeśli to wywołanie jest czynione
z pewnego programu przerwania, lub kiedy MS-DOS nie jest gotowy, system może zachowywać się
nieprzewidywalnie. Użyj tego polecenie tylko kiedy pojawił się SoftICE w trybie VM lub trybie
chronionym 16 lub 32 bitowym, uruchomionym przy ring 3. W 32 bitowym, kod ring0 trybu
chronionego wyświetla błędy
Ostrzeżenie
Używaj polecenia EXIT ostrożnie. Ponieważ SoftICE może pojawić się w dowolnej chwili, może
wystąpić sytuacja w której MS-DOS jest w stanie nie zaakceptować wywołania funkcji exit. Również
polecenie EXIT nie resetuje ustawień określonego programu
Notka: polecenie EXIT nie resetuje trybu video lub wektorów przerwań. Dla programów Windows,
polecenie EXIT nie zwalnia zasobów.
Jeśli działasz pod Win32, polecenie EXIT czasami powoduje wyświetlenie okienka dialogowego z
komunikatem „Unhandled exception occured”. Naciśnij OK. dla zamknięcia aplikacji
Dla Windows 9x i rodziny Windows NT
EXIT nie jest obsługiwane
Przykład
Poniższe polecenie powoduje zamknięcie bieżącego programu MS-DOS lub Windows
EXIT
EXP
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Symbol / Źródło
Definicja
Wyświetla eksportowane symbole z DLL’i
Składnia
EXP [[moduł!] [nazwa częściowa]] | [!]
moduł !
Wyświetla eksporty z tylko z określonego modułu
nazwa częściowa
Eksportowany symbol lub pierwsze kilka znaków nazwy eksportu
symbolu. Znak ? może być użyty jako znak wieloznaczności w miejsce
znaku w nazwie eksportu.
!
Wyświetla listę modułów dla których SoftICE ładuje eksporty
Użycie
Użyj polecenia EXP do pokazania eksportów z DLL’i Windows, sterowników rodziny Windows NT i
16 bitowych sterowników (rozszerzenie .DRV) dla których SoftICE ładuje eksporty. Aby przekazać
SoftICE jakie DLL’e i sterownik załadować, ustaw ciąg inicjalizacyjny SoftICE na Exports in
Symbol Loader.
Moduł i nazwa parametrów mogą być użyte dla selektywnego wyświetlania eksportów tylko z
określonego modułu, i/ lub eksportów, które dopasowują znaki i znaki wieloznaczności w nazwie
parametru. Kiedy są wyświetlane eksporty, nazwa modułu jest pokazana najpierw w lini a nazwa
eksportu i jego adres są pokazane poniżej.
Notka: Ponieważ DLL’e i sterowniki działają w trybie chronionym, adresy są adresami trybu
chronionego
Plecenie to jest poprawne zarówno dla 16 jak i 32 bitowych DLL’i. z 16 bitowymi eksportami
będącymi najpierw wylistowanymi.
Dla Windows 3.1
SoftICE automatycznie ładuje eksporty dla KERNEL, USER i GDI
Dla Windows 9x
SoftICE automatycznie ładuje eksporty dla KERNEL,USER i GDI. Symbol Loader może
dynamicznie załadować 32 bitowe eksporty symboli
Dla rodziny Windows NT
SoftICE automatycznie ładuje eksporty dla KERNEL32,USER32 i GDI32. Symbol Loader może
dynamicznie załadować 32 bitowe eksporty symboli.
Przykład
Poniższy przykład polecenia EXP wyświetla wszystkie eksporty, które zaczynają się ciągiem
DELETE. Dane wyjściowe pokazują ,że KERNEL32 ma 3 dopasowane eksporty L DELETEATOM,
DELETEFILE i DELETEPATHNAME. Podprogramy te są umieszczone odpowiednio pod 127:E3,
11F:7D4 i 127:345A. Następujące eksporty z KERNEL są eksportami z USER i GDI i tymi 32
bitowymi eksportami
EXP delete
KERNEL
0127: 00E3
DELETEATOM 011F:07D4 DELETEFILE
0127:345A
DELETEPATHNAME
USER
176F:0C88
DELETEMENU
GDI
0527:0000
DELETEMETAFILE 04B7: 211C DELETESPOOLPAGE
047F:55FD
DELETEDC 054F:0192 DELETEPQ
047F:564B
DELETEOBJECT 04B7:226E DELETEOBJ
0587:A22E
DELETEENHMETAFILE
KERNEL32
0137:BFF97E9B DeleteAtom 0137:BFF88636 DeleteCriticalSection
0137:BFF9DC5A DeleteFile 0137:BFFA4C49 DeleteFileW
USER32
0137:BFF62228 DeleteMenu
GDI32
0137: BFF3248F DeleteColorSpace 0137:BFF32497 DeleteDC
0137: BFF3248B DeleteenhMetaFile 0137: BFF31111 DeleteMetaFile
0137: BFF3249F DeleteObject
Znak ! jest używany do zawężania danych wyjściowych EXP tylko do tych modułów, które są
wylistowane w lini poleceń na lewo od !. W poniższym przykładzie żaden DLL ani sterownik nie jest
określony przed !, więc SoftICE po prostu zrzuci nazwy wszystkich modułów, których eksproty ma
załadowane
EXP !
KERNEL
USER
GDI
KERNEL32
USER32
GDI32
W poniższym przykładzie, polecenie EXP listuje wszystkie eksporty wewnątrz USER32.DLL, które
zaczynają się „IS” .Znak ! jest tu użyty do zróżnicowania nazwy modułu z nazwą kwalifikatora
EXP user32 ! is
USER32
0137:BFF64290 IsCharAlphaA
0137:BFF64256 IsCharAlphaNumericA
0137:BFF61014 IsCharAlphaNumericW
0137:BFF61014 IsCharAlphaW
0137:BFF641E8 IsCharLowerA
0137:BFF61014 IsCharLowerW
0137:BFF64222 IsCharUpperA
0137:BFF61014 IsCharUpperW
0137:BFF61F6A IsChild
0137:BFF6480F IsClipboardFormatAvailable
0137:BFF64D7C IsDialogMessage
0137:BFF64D7C IsDialogMessageA
0137:BFF6101D IsDialogMessageW
0137:BFF618A4 IsDlgButtonChecked
0137:BFF62F12 IsHungThread
0137:BFF64697 IsIconic
0137:BFF623A5 IsMenu
0137:BFF649B9 IsRectEmpty
0137:BFF644BF IsIWindow
0137:BFF646E1 IsWindowsEnabled
0137:BFF638C4 IsWindowUnicode
0137:BFF64706 IsWindowVisible
0137:BFF646BC IsZoomed
Zobacz
SYMBOL; TABLE
F
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Różne
Definicja
Wypełnia pamięć danymi
Składnia
F adres l długość lista danych
adres
Adres startowy spod którego zaczynamy wypełnianie pamięci
l długość
Długość w bajtach
lista danych
Lista bajtów lub stałych łańcuchowych oddzielonych przecinkami lub spacjami.
Ciąg łańcuchowy może być otoczony pojedynczym cudzysłowem lub podwójnym
cudzysłowem.
Użycie`
Pamięć jest wypełniana szeregiem bajtów lub znaków określonych w liście danych. Pamięć jest
wypełniana poczynając spod określonego adresu i kontynuuje dla określonej długości przez parametr
L. Jeśli długość listy danych jest mniejsza niż określona długość, lista danych jest powtarzana tyle
razy ile jest to konieczne
Przykład
Poniższy przykład wypełnia pamięć poczynając od lokacji DS: 8000h dla długości 100h bajtów
ciągiem ‘Test’. Ciąg ‘Test’ jest powtarzany dopóki długość wypełniania jest wyczerpana
F ds.:8000 l 100 ‘test’
FAULTS
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie trybem
Definicja
Włącza lub wyłącza pułapkowanie zakłóceń
Składnia
FAULT [on | off]
Użycie
Użyj polecenia FAULTS do włączenia lub wyłączenia przez SoftICE pułapkowania zakłóceń
procesora
Przykład
Poniższy przykład wyłącza pułapkowanie zakłóceń w SoftICE
FAULTS off
Zobacz
SET
FIBER
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Zrzuca strukturę danych fiber
Składnia
FIBER [adres]
Adres
Użycie
Użyj polecenia FIBER do zrzucenia struktury danych fiber jako zwracanej przez CreateFiber(). Jeśli
nie określisz adresu, FIBER zrzuca strukturę danych fiber z bieżącego wątku. SoftICE dostarcza
śledzenia stosu po zrzuceniu.
Przykład
Poniższy przykład zrzuca dane fiber powiązane z bieżącym wątkiem
FIBER
Fiber state for the current thread:
User data: 004565D0
SEH Ptr: 01C2FFA8
Stack top: 01C30000
Stack bottom: 01C2F000 Stack
Limit: 01B30000
EBX=00000001 ESI=005862B8 EDI=004565D0 EBP=01C2FF88
ESP=01C2FC4C
EIP=63011BAF a.k.a. WININET!. Text+00010BAF
Ö
at 001B:00579720
FILE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Symbol / Źródło
Definicja
FILE [[*] nazw pliku]
*
Wyświetla wszystkie pliki w bieżącej tablicy symboli
nazwa pliku
Nazwa pliku czyniący bieżący plik źródłowym
Użycie
Polecenie FILE jest często użyteczne kiedy ustawiamy punkt przerwania w lini, która nie ma
Powiązanego symbolu. Użyj FILE do przeniesienia żądanego pliku do okna Kodu, użyj polecenia SS
do zlokalizowania określonej lini, przesunięcia kursora do określonej lini, potem wpisz BPX lub
naciśnij F9 do ustawienia punktu przerwania.
*Jeśli określisz nazwę pliku, plik ten stanie się plikiem bieżącym i zacznie się wyświetlanie pliku w
oknie Kodu
*Jeśli nie określisz nazwy pliku, zostanie wyświetlona bieżącego pliku źródłowego
*jeśli określisz * (gwiazdkę) wszystkie pliki w bieżącej tablicy symboli zostaną wyświetlone
W poleceniu FILE tylko są dostępne pliki źródłowe załadowane do pamięci Symbol Loadere’em lub
przeładowane przy inicjalizacji.
Dla Windows 9x i rodziny Windows NT
Kiedy określisz nazwę pliku w poleceniu FILE, SoftICE przełącza kontekst adresu jeśli bieżąca
tablica symboli ma powiązany kontekst adresu.
Przykład
Zakładając, że jest załadowany main.c Symbol Loader’em, poniższe polecenie wyświetla plik w
oknie kodu poczynając od lini 1
FILE main.c
FKEY
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Pokazuje i edytuje przypisania klawiszy funkcyjnych
Składnia
FKEY [klawisz funkcyjny ciąg]
klawisz funkcyjny
Klawisz
Opis
F1 – F12
Nie przesuwające klawisze funkcyjne
SF1 – SF12
Przesuwające klawisze funkcyjne
CF1 – CF12
Klawisz kontrolny plus klawisz funkcyjny
AF1 – AF12
Klawisz alternatywny plus klawisz funkcyjny
ciąg
Składa się z poprawnych poleceń SoftICE i specjalnych znaków
karetki (^) i średnika (; ). Umieść ( ^ ) na początku polecenia aby
uczynić go niewidocznym. Umieść średnik (;) w ciągu w miejsce
Enter
Użycie
Użyj polecenia FKEY do powiązania ciągu jednego lub więcej poleceń SoftICE z klawiszem
funkcyjnym. Jeśli użyjesz polecenia bez żadnych parametrów, bieżące powiązanie klawisza
funkcyjnego zostanie wyświetlone.
Notka: Możesz również wyedytować powiązanie klawisza funkcyjnego przez modyfikację ciągów
inicjalizujących dla Keyboard Mapping w Symbol Loader’ze.
Do zwolnienia powiązania klawisza funkcyjnego , użyj polecenia FKEY z parametrem nazwa _
klawisza_ funkcyjnego po której następuje ciąg _ zerowy.
Użyj symbolu powrotu karetki w ciągu powiązania klawisza funkcyjnego do powiązania szeregu
poleceń z klawiszem funkcyjnym. Symbol powrotu karetki jest przedstawiany przez średnik ( ; ).
Jeśli wstawisz znak karetki „^” lub naciśniesz Shift – 6 przed nazwą polecenia, polecenie stanie się
niewidoczne. Możesz użyć tego polecenia jak każdego innego, ale wszystkie informacje, które
zazwyczaj są wyświetlane w oknie Poleceń (wyłączając komunikaty błędów) są usuwane. Tryb
niewidoczności jest użyteczny kiedy polecenie zmienia informację w oknie (Kodu , Rejestrów lub
Danych), ale nie chcesz zaśmiecać okna Poleceń.
Możesz również użyć znaku plus (+) do powiązania niekompletnego polecenia z klawiszem
funkcyjnym. Kiedy naciśnięto klawisz funkcyjny, SoftICE wyświetli część polecenia w lii poleceń
aby użytkownik mógł go zakończyć. SoftICE implementuje klawisze funkcyjne poprzez wstawienie
całego ciągu do swojego bufora klawiatury. Klawisze funkcyjne dlatego też mogą być używane w
dowolnym miejscu gdzie może być wpisane poprawne polecenie. Jeśli chcesz aby powiązanie
klawisza funkcyjnego było zawsze kiedy używasz SoftICE, zainicjalizuj mapę klawiatury wewnątrz
ustawień konfiguracyjnych SoftICE.
Przykład
Poniższy przykład wiąże polecenie przełączania okna Rejestrów (WR) do klawisza funkcyjnego F2.
Karetka „^” czyni funkcję niewidoczną a średnik (; ) kończy funkcję powrotem karetki . Po wpisaniu
tego polecenia, możesz nacisnąć klawisz F2aby przełączyć włączanie lub wyłączanie okna Rejestrów
FKEY f2 ^wr;
Poniższy przykład pokazuje, że może być wiele poleceń powiązanych z pojedynczą funkcją i że
polecenia częściowe mogą być powiązane tak aby użytkownik mógł je skończyć. Po wpisaniu tego
polecenia, naciśnij sekwencję klawiszy Ctrl F1 powodując, że program wykona się dopóki komórka
CS:8028F000h nie zostanie osiągnięta, wyświetlając zawartość stosu i zaczyna polecenie U dla
zakończenia przez użytkownika
FKEY cf1 g cs:8028f000; d ss:esp ; u cs:eip+
Po wpisaniu poniższego przykładu naciśnij klawisz F1 czyniąc okno Danych dłuższym o 3 linie i
zrzucając dane poczynając od 100h w segmencie bieżąco wyświetlanym w oknie Danych
FKEY f1 wd 3 ; d 100;
Poniższy przykład wiąże polecenie z klawiszem F1 do przełączani okna Rejestrów, tworząc okno
Local o długości 8 a okno Kodu o długości 10
FKEY f1 wr; wl 8; wc 10;
FLASH
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Definicja
Odtwarzanie ekranu Windows podczas poleceń P i T
Składnia
FLASH [on | off]
Użycie
Użyj polecenia FLASH do określenia czy ekran Windows jest odtwarzany podczas poleceń T (śledź)
i P (praca krokowa). Jeśli określisz ,że ekran Windows ma być przywracany, zostanie przywrócony
przez krótki okres czasu jaki są wykonywane polecenia P lub T. Ta cecha jest konieczna dla
zdiagnozowania sekcji kodu, która uzyskuje bezpośredni dostęp do pamięci video. W większości
przypadków, jeśli ten podprogram będzie wywołany zapisze ekran Windows, a polecenie P wykona
się poprzez taką funkcję, ekran zostanie przywrócony. Jednakże, kiedy diagnozujesz aplikacje trybu
chronionego, takie jak VxD’ki lub aplikacje Windows, z wyłączonym FLASH’em, SoftICE
przywróci ekran tylko jeśli sterownik wyświetlania wywołany jest zanim ta funkcja się zakończy.
Jeśli nie określisz parametru, wyświetli się bieżący stan FLASH. Domyślnie jest FLASH OFF
Przykład
Poniższe polecenie włącza tryb FLASH. Ekran Windows przywracany jest podczas późniejszego
polecenia P lub T
FLASH on
Zobacz
SET
FMUTEX
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informacje o zmutowanych obiektach jądra
Składnia
FMUTEX [wyrażenie]
wyrażenie
Wyrażenie które decyduje czy ważny adres jest akceptowalny
Użycie
Polecenie FMUTEX wyświetla informacje o zmutowanych obiektach identyfikowanych poprzez
określone wyrażenie. Musisz wpisać wyrażenie pobierające dane, ponieważ nie jest to typ obiektu
samego Windows NT. Parametr wyrażenie jest czymś co generalnie nie jest rozpatrywane jako
nazwa. To znaczy jest to liczba. Złożone wyrażenie (wyrażenie zawierające operatory, takie jak
Explorer + 0) lub nazwę rejestru
Przykład
Poniższy przykład wyświetla informację o obiekcie FMUTEX:
FMUTEX ecx
Adress
Count
Own KTEB (TID)
Contention
OLDIql
State
8014EA10
1
1( 0P)
0
0
Clear
Zobacz
KMUTEX
FOBJ
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o obiekcie pliku
Składnia
FOBJ [ adres fobj]
adres fobj
Adres początku struktury obiektu pliku będącej wyświetlaną
Użycie
Polecenie FOBJ wyświetla zawartość obiektów pliku jądra. Polecenie sprawdza poprawność
określonego obiektu pliku przez upewnienie się, że obiekt urządzenia odnosi się do niego poprzez
uprawniony obiekt urządzenia. Pola pokazane przez SoftICE nie są udokumentowane tu w całości,
ponieważ właściwe informacje o nich można znaleźć w NTDDK.H w Windows NT/2000/XP DDK.
Kilka pól zasługuje na specjalną uwagę, jednak ponieważ piszący sterowniki uznali je za szczególnie
użyteczne:
DeviceObject
Pole to jest wskaźnikiem do obiektu sterownika powiązanego z obiektem
pliku.
Vpb
Jest to wskaźnik do wolumenu parametru bloku powiązanego z obiektem
pliku
FSContext1 i
FSContext2
Są to prywatne pola sterownika systemu plików (FSD), które mogą służyć
jako klawisze pomocne sterownikom w określaniu jakie wewnętrzny dany
FSD jest powiązany w tym obiektem
Inne interesujące pola, których cele powinny być dosyć oczywiste, obejmują ochronę dostępu
Boolowskiego, Flagi, Nazwę Pliku i CurrentByteOffset
Przykład
Poniższe przykład pokazuje dane wyjściowe z polecenia FOBJ
FOBJ fd877230
DeviceObject *
:FD881570
Vpb
*
:00000000
FsContext *
:FD877188
FsContext2 *
:FD877C48
SecObjPointer *
:FD8771B4
PrivateCacheMap *
:00000001
FinalStatus *
:00000000
RelatedFileObj *
:00000000
LockOperation
:False
DeletePending
:False
ReadAccess
:True
WriteAccess
:True
DeleteAccess
:False
SharedRead
:True
SharedWrite
:True
SharedDelete
:False
Flags
:00040002 FO_SYNCHRONOUS_IO |
FO_HANDLE_CREATED
FileName
: \G:\SS\data\status.dat
CurrentByteOffset
: 00
Waiters
:00000000
Busy
:00000000
LastLock *
:00000000
&Lock
:FD877294
&Event
:FD8772A4
ComplContext *
:00000000
FORMAT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
Shift – F3
Definicja
Zmienia format okna Danych
Składnia
FORMAT
Użycie
Użyj polecenia FORMAT do zmiany wyświetlanego formatu aktualnie wyświetlanego okna Danych.
FORMAT cyklicznie przechodzi przez format wyświetlania w następującym porządku: bajt, słowo,
dwusłowo, krótka rzeczywista, długa rzeczywista, 10 bajtowa rzeczywista a potem znowu bajt. Każde
wywołanie FORMAT zmienia okno do kolejnego wyświetlenia formatu w tym porządku. Polecenie
to jest bardzo użyteczne kiedy powiążemy go z klawiszem funkcyjnym. Domyślnie powiązanym
klawiszem funkcyjnym jest Shift – F3. Shift – F3 jest również obsługiwane podczas edycji w oknie
Danych
Przykład
Poniższy przykład zmienia okno Danych do kolejnego wyświetlenia formatu w sekwencji bajt, słowo,
dwusłowo, krótka rzeczywista, długa rzeczywista i 10 bajtowa rzeczywista
FORMAT
G
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie przepływem
Definicja
Idzie pod dany adres
Składnia
G [= adres startowy] [adres przerwania]
=adres startowy
Dowolne wyrażenie, które powoduje ,że ważny adres jest
akceptowalny
adres przerwania
Dowolne wyrażenie, które powoduje ,że ważny adres jest
akceptowalny
Użycie
Polecenie G wychodzi z SoftICE. Jeśli określisz adres przerwania, pojedynczy ,jednorazowy punkt
przerwania wykonania zostanie ustawiony na tym adresie. Dodatkowo wszystkie trwałe punkty
przerwania są gotowe.
Wykonanie zaczyna się od bieżącego CS:EIP chyba ,że wprowadzisz parametr adresu startowego.
Jeśli wprowadzisz go, wykonywanie zacznie się od tego adresu. Wykonywanie jest kontynuowane
dopóki nie zostanie napotkany adres przerwania, pojawi się SoftICE sekwencją kluczy lub zostanie
wyzwolony trwały punkt przerwania. Kiedy pojawi się SoftICE, z jakiegoś powodu, jednorazowy
punkt przerwania wykonania zostaje wyczyszczony. Adres przerwania musi być pierwszym bajtem
instrukcji opkodu. Polecenie G bez parametrów zachowuje się tak samo jak polecenie X. Jeśli okno
Rejestrów jest widoczne kiedy pojawia się SoftICE wszystkie rejestry są zmienione ponieważ
polecenie G wprowadziło wyświetlenie z atrybutem pogrubienia video
Dla Windows 3.1
Nie trwale punkty przerwania wykonania używają instrukcji INT3 punktu przerwania
Dla Windows 9x i rodziny Windows NT
Nie trwałe punkty przerwania wykonania używają rejestrów diagnostycznych chyba ,że żaden nie jest
dostępny. Jeśli żaden nie jest dostępny używana jest instrukcja INT3
Przykład
Poniższe polecenie ustawia jednorazowy punkt przerwania pod adresem CS:9\80123456h
G 80123456
GDT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla Tablicę Globalnych Deskryptorów
Składnia
GDT [selektor]
selektor
Początkowy selektor GDT do wyświetlenia
Użycie
Polecenie GDT wyświetla zawartość Tablicy Globalnych Deskryptorów. Jeśli określisz opcjonalny
selektor, wylistowana jest tylko informacja o tym selektorze. Jeśli określony selektor jest selektorem
Tablicy Lokalnych Deskryptorów (to znaczy bit 2 to 1), SoftICE automatycznie wyświetla informacje
z LDT zamiast Z GDT
Dane wyjściowe Podstawowy adres liniowy i granica GDT jest pokazana na górze danych wyjściowych polecenia
GDT. Każda dalsza linia danych wyjściowych zawiera następujące informacje:
wartość selektora
Najniższe dwa bity tej wartości odzwierciedlają poziom uprzywilejowania
deskryptora
typ selektora
Typ
Opis
Code16
16 bitowy selektor kodu
Data16
16 bitowy selektor danych
Code32
32 bitowy selektor kodu
Data32
32 bitowy selektor danych
LDT
selektor Lokalnej Tablicy Deskryptorów
TSS32
32 bitowy selektor segmentu stanu zadania
TSS16
16 bitowy selektor segmentu stanu zadania
CallG32
32 bitowy selektor bramki wywołania
CallG16
16 bitowy selektor bramki wywołania
TaskG32
32 bitowy selektor bramki zadania
TaskG16
16 bitowy selektor bramki zadania
TrapG32
32 bitowy selektor bramki pułapki
TrapG16
16 bitowy selektor bramki pułapki
IntG32
32 bitowy selektor bramki przerwania
IntG16
16 bitowy selektor bramki przerwania
Reserved
Selektor zarezerwowany
selektor bazowy
Liniowy adres bazowy tego selektora
granica selektora
Rozmiar segmentu selektora
selektor DPL
Selektor poziomu uprzywilejowania deskryptora (DPL), który jest albo 0,
1, 2 lub 3
bit obecności
P lub NP., wskazuje czy selektor jest obecny czy nie
atrybuty segmentu
Wartość
Opis
RW
Selektor danych jest odczytywalny i zapisywalny
RO
Selektor danych jest tylko do odczytu
RE
Selektor kodu jest odczytywalny i wykonywalny
EO
Selektor kodu jest tylko wykonywalny
B
Jest ustawiony bit zajętości TSS’a
ED
Selektor danych rozszerzony w dół
Przykład
Poniższe polecenie pokazuje skrócone dane wyjściowe z polecenia GDT
GDT
Sel.
Type
Base
Limit
DPL
Attributes
GDTbase= C1398000
Limit=0FFF
0008
Code16 00017370
0000FFFF
0
P
RE
0010
Data16 00017370
0000FFFF
0
P
RW
0018
TSS32 C000AEBC
00002069
0
P
B
0020
Data16 C1398000
0000FFFF
0
P
RW
0028
Code32 00000000
FFFFFFFF
0
P
RE
0030
Data32 00000000
FFFFFFFF
0
P
RW
003B
Code16 C33E9800
000007FF
3
P
RE
0043
Data16 00000400
000002FF
3
P
RW
0048
Code16 00013B10
0000FFFF
0
P
RE
0050
Data16 00013B10
0000FFFF
0
P
RW
0058
Reserved 00000000
0000FFFF
0
NP.
0060
Reserved 00000000
0000FFFF
0
NP.
GENINT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterownie przepływem
Definicja
Wymusza wystąpienie przerwania
Skład
GENINT [nmi | int1 | int3 | numer przerwania]
nmi
wymusza przerwanie nie maskowalne
int1
wymusza przerwanie INT 1
int3
wymusza przerwanie INT3
numer przerwania
Dla Windows 3.1 i Windows 9x: poprawny numer przerwania pomiędzy 0
a 5Fh
Dla rodziny Windows NT: poprawny numer przerwania pomiędzy 0 a FFh
Użycie
Polecenie GENINT wymusza wystąpienie przerwania. Użyj tej funkcji do bezdotykowego sterowania
innym debuggerem jakiego używasz z SoftICE i testowania podprogramów przerwań. Polecenie
GENINT symuluje sekwencyjne przetwarzanie przerwani sprzętowego lub instrukcji INT. Wektory te
sterują przez bieżące wejście IDT dla określonego numeru przerwania
Ostrzeżenie: Musisz upewnić się ,że jest to poprawny podprogram obsługi przerwania zanim użyjesz
tego polecenia. SoftICE nie wie czy jest zainstalowany program obsługi. Twoja maszyna
prawdopodobnie zawiesi się jeśli użyjesz tego polecenia bez programu obsługi.
GENINT nie może być używany do symulacji zakłóceń procesora, które odkładają kod wyjątku. Na
przykład GENINT nie może symulować ogólnego błędu ochrony
Przykład
Poniższe polecenie wymusza przetrwanie nie maskowalne. Daje powrotne sterowanie dla CodeView
dla DOS, jeśli używasz SoftICE pomocniczo z CodeView dla DOS
GENINT nmi
Jeśli używasz CodeView dla Windows użyj polecenia
GENINT 0
Dla przekazywania sterowania dla innego debuggera , poeksperymentuj z numerami przerwań 0, 1,2 i
3. Kiedy polecenie I3HERE ==ON i używasz poziomu 3 debuggera, takiego jak BoundsChecker,
SoftICE pułapkuje na dowolnym punkcie przerwania INT 3 zainstalowanym przez poziom 3
debuggera. Poniższy przykład pokazuje jak uniknąć takiej sytuacji. Ustaw I3HERE ==OFF i użyj
polecenia GENINT dla reaktywacji tego punktu przerwania. Zwróci sterowanie do poziomu 3
debuggera a SoftICE nie zpułapkuje później INT 3
I3HERE off
GENINT 3
H
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Różne
Klawisz
F1
Definicja
Wyświetla informacje pomocy
Składnia
Dla Windows 3.1
H [polecenie | wyrażenie]
Dla Windows 9x i rodziny Windows NT
H [polecenie]
Użycie
Dla Windows 3.1
Pod Windows 3.1 , parametr jaki doprowadzasz określa czy pomoc jest wyświetlona lub czy
wyrażenie jest wyliczone. Jeśli określisz polecenie, pomoc wyświetli szczegółową informację o tym
poleceniu, wliczając w to składnię polecenia i przykład. Jeśli określisz wyrażenie, wyrażenie jest
wyliczane, a wynik jest wyświetlony szesnastkowo, dziesiętnie, dziesiętnie ze znakiem (tylko jeśli <
0) i ASCII.
Dla Windows 9x i rodziny Windows NT
Pod Windows 9x i rodziną Windows NT, polecenie H wyświetla pomoc o poleceniu SoftICE. Aby
wyświetlić pomoc ogólną o wszystkich poleceniach SoftICE wpisz polecenie H bez parametrów. Aby
zobaczyć szczegółowe informacje o określonym poleceniu, użyj polecenia H po którym następuje
nazwa polecenia o jakim chcesz uzyskać pomoc. Pomoc wyświetla opis polecenia, składnię i przykład
Przykład
Poniższy przykład wyświetla informacje o poleceniu ALTKEY:
H altkey
Set key sequence to invoke window
ALTKEY [ALT letter | CTRL letter]
Ex: ALTKEY ALT D
Zobacz
?
HBOOT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterownie przepływem
Definicja
Wykonuje twardy reset systemu
Składnia
HBOOT
Użycie
Polecenie HBOOT resetuje system komputerowy. SoftICE nie zachowuj się w trakcie procesie resetu.
HBOOT jest wystarczający chyba ,że karta rozszerzeń wymaga resetu zasilania. W tych rzadkich
przypadkach, zasilanie musi być odnowiony. HBOOT wykonuje taki sam poziom resetu systemu jak
naciśnięcie Ctrl – Alt – Delete kiedy nie ma SoftICE
Przykład
Poniższy przykład wymusza ponowne uruchomienie systemu
HBOOT
HEAP
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla globalną stertę Windows
Składnia
HEAP –L [wolne | nazwa modułu | selektor]
-L
Wyświetla tylko wejścia globalnej sterty, które zawierają lokalną stertę
wolny
Wyświetla tylko wejścia sterty oznaczone jako FREE
nazwa modułu
Nazwa modułu
selektor
selektor LDT
Użycie
Dla Windows 9x
Dla 16 bitowych modułów, polecenie HEAP działa tak samo jak robi to pod Windows 3.1
Dla rodziny Windows NT
Dla modułów 16 bitowych, polecenie HEAP dział tak samo jak dział pod Windows 3.1 ale jest
określony proces. Musisz być w procesie NTVDM , który zawiera okienko WOW (Windows w
Windows)
Dla Windows 3.1
Polecenie HEAP wyświetla globalną stertę Windows w oknie Poleceń
*Jeśli nie określisz parametrów, wyświetlana są wejścia globalnej sterty
*Jeśli określisz FREE, wyświetlane są tylko wejścia sterty oznaczone jako FREE
*Jeśli określisz nazwę modułu, wyświetlane są tylko wejścia należące do modułu
*Jeśli określisz selektor LDT, wyświetlane są tylko pojedyncze wejście odpowiadające temu
selektorowi
Na końcu listingu, całkowita ilość pamięci używana przez wejścia sterty, które są pokazane. Jeśli
bieżący CS:EIP należy do jednego z wejść sterty, które wejście wyświetlane są z atrybutami
pogrubionymi.
Jeśli nie ma bieżącego LDT, polecenie HEAP jest niezdolne do wyświetlania informacji sterty
Dane wejściowe Dla każdego wejścia sterty są wyświetlane następujące informacje :
selektor lub uchwyt
W Windows 3.1 jest to prawie to samo. Wszystkie selektory sterty
mają dpl 3, podczas gdy odpowiadające uchwyty są takimi
selektorami z dpl 2. Na przykład jeśli uchwyt to 106h, selektor
będzie 107h. Użyj jednego z nich w wyrażeniu
adres
32 bitowy płaski adres wirtualny
rozmiar
Rozmiar wejścia sterty w bajtach
nazwa modułu
Nazwa modułu właściciela wejścia sterty
typ
Typ
Opis
Code
Nie odrzucony segment kodu
Code D
Odrzucony segment kodu
Data
Segment danych
ModuleDB
Dane modułu podstawowego segmentu
TaskDB
Dane zadania podstawowego segmentu
BurgerM
Burger Master (sama sterta)
Alloc
Pamięć alokowana
Resource
Zasoby Windows
Dodatkowy typ informacji
Jeśli wejście sterty jest segmentem kodu lub danych, wyświetla
się numer segmentu z pliku .EXE. Jeśli wejście sterty jest
zasobem, może się wyświetlić jeden z następujących typów
zasobów:
UserDef Icon String Accel IconGrp Cursor Menu FontGrp
ErrTable NameTabl Bitmap Dialog Font CursGrp
Przykład
Poniższy przykład wyświetla wszystkie wejścia sterty należące do modułu KERNEL
HEAP kernel
Han/Sel
Address
Length
Owner
Type
Seg/Rsr
00F5
000311C0
000004C0
KERNEL
ModuleDB
00FD
00031680
00007600
KERNEL
Code
01
0575
00054220
00003640
KERNEL
Alloc
0106
00083E40
00002660
KERNEL
Code D
02
010E
805089A0
00001300
KERNEL
Code D
03
0096
80520440
00000C20
KERNEL
Alloc
Total Memory: 62K
HEAP32
OS
Windows 9x
Typ
Informacja systemowa
Definicja
Wyświetla globalną stertę Windows
Składnia
HEAP32 [hheap32 | nazwa zadania]
hheap32
uchwyt stery zwracany przez HeapCreate()
nazwa zadania
nazwa dowolnego z 32 bitowych zadań
Użycie
Dla Windows 9x
Polecenie HEAP32 wyświetla sterty dla procesu.
Notka: Dla modułów 16 bitowych, użyj polecenia HEAP32 (opisanego poniżej)
Polecenie HEAP32 wyświetla co następuje:
*Domyślny system sterty KERNEL32
*Prywatne sterty procesów stworzonych przez funkcję HeapCreate()
*Dwie sterty Ring-0 stworzone przez VMM. Pierwsza jest wyświetlana jako sterta strony
zablokowanej, druga jako sterta tablicy strony
*Jedna sterta Ring-0 dla każdej istniejącej maszyny wirtualnej
Jeśli dostarczysz nazwy procesu, SoftICE wyświetli całą domyślną stertę procesu dla tego procesu, a
kontekst adresu zmieni się automatycznie na ten proces.. Dla obejrzenia nie domyślnej sterty dla
procesu, określ adres bazowy sterty zamiast nazwy procesu.
Wersja diagnostyczna Windows 9x dostarcza dodatkowych informacji diagnostycznych dla każdego
elementu sterty wewnątrz sterty. Aby je zobaczyć musisz uruchomić właściwą wersję diagnostyczną
jak następuję:
* Dla sterty Ring-3 KERNEL32, wersja diagnostyczna SDK
*Dla sterty Ring-0 VMM, wersja diagnostyczna DDK
Dane wyjściowe Dla każdego wejścia sterty wyświetlane są następujące informacje
HeapBase
Adres pod którym zaczyna się sterta
MaxSize
Aktualny maksymalny rozmiar do którego sterta może rosnąć bez
tworzenia nowego segmentu.
Committed
Liczba kilobajtów potwierdzonej pamięci, które są aktualnie
obecne w pamięci fizycznej
Segments
Liczba segmentów w stercie. Za każdym razem kiedy sterta rośnie
poza aktualny rozmiar maksymalny, tworzony jest nowy segment.
Type
Typ sterty
Opis
Private
Sterta Ring 3 tworzona przez proces
aplikacji
System
Sterta domyślna Ring 3 dla KERNEL32
Ring0
Sterta Ring0 tworzona przez VMM
VM##
Sterta tworzona przez VMM dla
określonej Maszyny Wirtualnej która
przechowuje strukturę danych
określoną dla tej VM
Owner
Nazwa procesu ,który posiada stertę
Kiedy wyświetlamy pojedynczą 32 bitową stertę, wyświetlane są następujące informacje:
Typ sterty
Opis
Address
adres elementu sterty
Size
rozmiar w bajtach tego elementu sterty
Free
Jeśli element sterty jest blokiem
Swobodnym, pojawia się słowo FREE;
W przeciwnym razie to pole jest puste
Kiedy jest zainstalowana właściwa wersja diagnostyczna SDK i DDK, pojawią się dodatkowe
informacje dla każdego elementu sterty;
Element sterty
Opis
EIP
Adres EIP kodu, który alokuje element
sterty
TID
ID wątku VMM alokowanego wątku
Owner
Najbliższy symbol adresu EIP
Przykład
Poniższy przykład wyświetla 32 bitową stertę
HEAP32
HeapBase
Max Size
Committed
Segments
Type
Owner
00EA0000
1024K
8K
1
Private
Mapisp32
00DA0000
1024K
8K
1
Private
Mapisp32
00CA0000
1024K
8K
1
Private
Mapisp32
00960000
1024K
8K
1
Private
Mapsip32
00860000
1024K
8K
1
Private
Mapsip32
Poniższy przykład wyświetla wszystkie wejścia sterty dla Exchng32
HEAP32 exchng32
Heap: 00400000
MaxSize; 1028K Committed; 12K
Segments: 1
Address
Size
00400078
000004E4
00400560
00000098
0040005FC
00000054
00400654
000000A4
0040006FC
00000010
00400710
00000014
Free
HEAP32
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla stertę Windows
Składnia
HEAP32 [[-w -x -s -v -b -trace] [sterta | wejście sterty | typ procesu]]
-w
Przechodzi stertę, pokazując informację o każdym wejściu sterty
-x
Pokazuje rozszerzoną sumaryczną 32 bitową stertę
-s
Dostarcza sumarycznego segmentu dla sterty
-v
Zatwierdza stertę lub wejście sterty
-b
Pokazuje adres bazowy i rozmiary nagłówka wejścia sterty
-trace
Wyświetla bufor śledzenia sterty
sterta
32 bitowy uchwyt sterty
wejście sterty
Zaalokowany blok sterty zwracany przez HeapAlloc lub HeapRealloc
typ procesu
Nazwa procesu, id procesu lub uchwyt procesu (KPEB)
Użycie
Wszystkie opcje i parametry HEAP32 są opcjonalne. Jeśli nie określisz opcji lub parametrów,
zostanie wyświetlona sumarycznie podstawowa sterta dla każdej sterty w każdym procesie. Jeśli
parametr jest określony bez opcji, będzie wykonane podsumowanie dla każdego wejścia sterty, sterty
lub w przypadku typu procesu, podsumowanie dla każdej sterty wewnątrz procesu.
Notka: Wszystkie 16 bitowe sposoby działania HEAP jeszcze działają. Odnieś się do HEAP dla
Windows 3.1. te informacje stosuje się dla HEAP3.1
Opcja Przejścia
Opcja przejścia (-w) przechodzi stertę, pokazując stan każdego wejścia sterty na stercie. Przejście jest
domyślną opcją jeśli określisz uchwyt sterty bez innych opcji.
Opcja Rozszerzenia
Opcja rozszerzenia (-x) wyświetla szczegółowy opis wszystkich użytecznych o stercie, wliczając w to
sumaryczny segment i listę Wirtualnie Zaalokowanych Bloków (VAB) lub dodatkowa tablica
UnCommitted Range (UCR), która może być stworzona dla sterty.
Opcja Segmentu
Opcja segmentu (-s) wyświetla proste podsumowanie dla sterty i dla każdego z jej segmentów sterty.
Segmenty są tworzone do odwzorowania liniowej przestrzeni adresowej dla regionu sterty. Sterta
może być złożona z góra szesnastu segmentów.
Opcja Zatwierdzania
Opcja zatwierdzania (-v) całkowicie zatwierdza pojedyncze wejście sterty lub stertę i wszystkie jej
komponenty, wliczając w to segmenty, wejścia sterty i VAB’y. W większości przypadków,
zatwierdzenie sterty jest odpowiednikiem bardziej surowszej funkcji API Win32 Heap. Opcja
zatwierdzania jest jedynie opcją, która pobiera parametr wejścia sterty jako parametr wejściowy.
Wszystkie inne opcje działają z uchwytem sterty lub typami procesu. Jeśli sterta jest poprawna,
wyświetla się właściwy komunikat. Jeśli jest niepoprawna, pojawia się jeden z następujących
komunikatów błędu
*Dla bloku którego nagłówek jest uszkodzony SoftICE wyświetla następujący komunikat:
Generic Error: 00140BD0 js not heap entry, or it is corrupt
Specific Error; 00140BD0: Backward link for Block is invalid
*Dla bloku którego bajt zabezpieczenia został nadpisany SoftICE wyświetla następujący komunikat:
Allocated blok: 00140BD0; Block BUSY TAIL is corrupt
Notka: Jeśli uruchomisz aplikację pod debuggerem np. BoundsChecker’em lub Visual C++ , każdy
zaalokowany blok ma bajt zabezpieczenia a każdy wolny blok jest oznaczony jako wzorzec aby
mogło zostać wykryte losowe nadpisywanie.
*Dla wolnego bloku, który zapisano, później będącym zwolnionym, SoftICE wyświetla następujący
komunikat:
Free block; 00140E50; Free block failed FREE CHECK ar 141E70
Opcja Bazowa
Użyj opcji bazowej (-b) do zmiany trybu w jakim adresy i rozmiary wejścia sterty są wyświetlane.
Dla zwykłej operacji, wszystkie dane wyjściowe pokazują adres i daną wejścia sterty, i rozmiar
danych użytkownika dla tego bloku. Kiedy określisz opcję bazową, wszystkie dane wyjściowe
pokazują adres nagłówka wejścia sterty, który poprzedza każde wejście sterty i rozmiar pełnego
wejścia sterty. Rozmiar pełnego wejścia sterty obejmuje nagłówek wejścia sterty i dodatkowe dane
zaalokowane dla bajtu zabezpieczenia lub zaspokojenia żądania wyrównania. W wielu sytuacjach
określasz tylko adresowanie bazowe kiesy musisz przejść stertę lub jej wejścia ręcznie.
Kiedy użyjesz opcji bazowej, adres bazowy dla każdego wejścia sterty jest 8 bajtów mniejszy niż
kiedy baza nie jest określona, ponieważ nagłówek wejścia sterty poprzedza aktualne wejście sterty o 8
bajtów. Po drugie, rozmiar dla alokowanych bloków jest większy ponieważ obejmuje dodatkowo 8
bajtów nagłówka wejścia sterty, bajtów zabezpieczenia i dodatkowych bajtów potrzebnych
właściwemu wyrównaniu . Dane wyjściowe z opcji bazowej są użyteczne dla ręcznego nawigowania
pomiędzy sąsiednimi wejściami sterty i dla sprawdzania przekroczenia pamięci pomiędzy końcem
danych wejścia sterty a nieużywaną przestrzenią przed bajtem zabezpieczenia. Bajty zabezpieczenia
są zawsze alokowane jako ostatnie dwa DWORD’y wejścia sterty.
Notka: Opcja bazowa nie ma wpływu na parametry wejściowe. Adresy wejścia sterty są zawsze
przyjmowane jako adresy danych wejścia sterty
Opcja Śledzenia
Użyj opcji śledzenia (-trace) do wyświetlenia kontekstów buforu śledzenia sterty, który zapisuje
działanie, które wystąpi wewnątrz sterty. Bufory śledzenia sterty są opcjonalne i generalnie nie są
tworzone. Włączenie śledzenia w API Win32, określa flaga HEAP_CREATE_ENABLE_TRACING
jako jednej z flag ntdll!RtlCreateHeap. Nie możesz użyć tej opcji z Kernel32!HeapCreate() ponieważ
usuwa wszystkie flagi diagnostyczne zanim wywoła ntdll!RtlCreateHeap. Musisz również uruchomić
tą aplikację z poziomu-3 debuggera, na przykład, BoundsChecker lub Visual C++, aby opcja
diagnostyczna sterty Win32 została włączona.
Jeśli przekażesz typ procesu jako parametr , wszystkie opcje są wykonane dla każdej sterty wewnątrz
procesu. Polecenie HEAP32 i wszystkie jego opcje działają albo na pojedynczym określonym
uchwycie sterty lub WSZYSTKICH stertach dla całego procesu.
Poniższe polecenie wykonuje zatwierdzenie sterty dla wszystkich stert w procesie Test32:
HEAP 32 –v test32
Kiedy określisz np. 0x140000, SoftICE zakłada ,że jest w bieżącym kontekście. Możesz użyć
polecenia ADDR do zmiany tego właściwego kontekstu jeśli to konieczne.
W pewnych przypadkach, rzeczywista pamięć fizyczna, która wspiera szczególny adres liniowy nie
będzie obecna w pamięci, ponieważ jest stronicowana przez system operacyjny. W tym przypadku,
polecenie HEAP32 wykrywa, unika i gdzie to możliwe, kontynuuje działanie bez „nie obecnych”
stron. Jeśli pamięć nie obecna zabezpiecza polecenie HEAP32 przed wykonaniem jego pracy,
zostaniesz powiadomiony o tym warunku. Kiedy jest możliwe aby polecenie HEAP32 przeskoczyło
nie obecne strony i kontynuuje przetwarzanie w punkcie gdzie pamięć fizyczna jest obecna. Ponieważ
pamięć nieobecna zabezpiecza polecenie HEAP32 przed wykonaniem pełnego zatwierdzenia sterty,
podprogram zatwierdzania wskazuje powodzenie, ale pozwala ci się dowiedzieć, że tylko częściowe
zatwierdzenie może być wykonane
Dane wyjściowe Base
Adres bazowy sterty, to znaczy uchwytu sterty
Id
ID sterty
Cmmt/Psnt/Rsvd
Ilość dopuszczonej, obecnej lub zarezerwowanej pamięci używanej przez
wejścia sterty.
Segments
Ilość segmentów sterty wewnątrz sterty
Flags
Flagi sterty, na przykład HEAP_GROWABLE (0x02)
Process
Proces, który jest właścicielem sterty
Jeśli określisz przełącznik –W, wyświetlone są następujące informacje
Base
Jest to adres wejścia sterty
Type
Typ wejścia sterty
Wejście sterty
Opis
HEAP
Przedstawia nagłówek sterty
SEGMENT
Przedstawia segment sterty
ALLOC
Aktywne wejście sterty
FREE
Nieaktywne wejście sterty
VABLOCK
Alokowany wirtualny blok (VAB)
Size
Rozmiar wejścia sterty. Zazwyczaj, jest to liczba bajtów dostępnych
aplikacji dla przechowywania danych
Seg#
Segment sterty w którym wejście sterty jest alokowane
Flags
Flagi wejścia sterty
Jeśli określisz przełącznik –S, poniższe dodatkowe informacje są wyświetlone:
Seg#
Numer segmentu segmentu sterty
Segment Range
Adres liniowy zakresu, jaki ten segment odwzorowuje
Cmmt/Psnt/Rsvd
Ilość dopuszczonej, obecnej i zarezerwowanej pamięci dla tego segmentu
sterty
Max UCR
Maksymalna niedopuszczalny zakres pamięci liniowej. Wartość ta określa
największy blok, który może być stworzony wewnątrz tego segmentu
sterty
Przykład
Poniższy przykład wyświetla podstawową sumaryczną stertę dla każdej sterty w każdym procesie
HEAP32
Base
Id
Cmmt/Psnt/Rsvd
Segment
Flags
Process
00230000
01
0013/0013/00ED
1
00000002
csrrs
7F6F0000
02
0008/0008/0008
1
00007008
csrrs
00400000
03
001C/001A/0024
1
00004003
csrss
7F5D0000
04
0005/0005/001B
1
00006009
csrss
00460000
05
00F6/00F1/001A
2
00003002
csrss
005F0000
06
000B/000B/0005
1
00005002
csrss
7F2D0000
07
002D/002D/02D3
1
00006009
csrss
02080000
08
0003/0003/0001
1
00001062
csrss
023C0000
09
0016.0014.00EA
1
00001001
csrss
HERE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie przepływem
Klawisz
F7
Definicja
Przechodzi do bieżącej lini kursora
Składnia
HERE
Użycie
Kiedy kursor jest w oknie Kodu, polecenie HERE wykonuje się dopóki program nie osiągnie bieżącej
lini kursora. HERE jest tylko dostępny kiedy kursor jest w oknie Kodu. Jeśli okno Kodu nie jest
widoczne lub kursor nie jest w oknie Kodu, użyj polecenia G. Użyj polecenia EC (klawisz domyślny
F6), jeśli chcesz przenieść kursor do okna Kodu.
Dla użycia polecenia HERE umieść kursor na instrukcji źródłowej lub instrukcji asemblowanej, jaką
chcesz wykonać. Wpisz HERE lub naciśnij klawisz funkcyjny do którego jest przypisany HERE
(domyślnie F7). Polecenie HERE ustawia pojedynczy, jednorazowy punkt przerwania wykonania
ustawiony pod adresem bieżącej pozycji kursora, przygotowuje wszystkie trwałe punkty przerwania, i
wychodzi z SoftICE.
Wykonanie zaczyna się pod bieżącym CS:EIP i kontynuuje dopóki nie napotka punktu przerwania
wykonania, używana jest sekwencja klawiszy pojawiania się okna, lub wystąpi trwały punkt
przerwania. Kiedy pojawia się SoftICE, z dowolnego z tych powodów, jednorazowy punkt
przerwania jest czyszczony.
Jeśli okno Rejestrów jest widoczne kiedy pojawia się SoftICE, wszystkie rejestry które zostały
zmodyfikowane ponieważ polecenie HERE powoduje wyświetlenie z atrybutem pogrubionego
video.
Dla Windows 3.1
Nie trwały punkt przerwania wykonania używa instrukcji punktu przerwania INT3
Dla Windows 9x i rodziny Windows NT
Nie trwały punkt przerwania wykonania używa rejestrów diagnostycznych chyba ,że żaden nie jest
dostępny, w takim przypadku, używa instrukcji INT3
Przykład
Poniższe polecenie ustawia punkt przerwania wykonania pod bieżącą pozycją kursora, wychodzi z
SoftICE i rozpoczyna się wykonanie spod bieżącego CS:EIP
HERE
HS
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Przeszukuje bufor historii dla określonego ciągu
Składnia
HS [ - | + ] ciąg
- (znak minus)
Przeszukuje w tył od tego punktu
+ (znak plus)
Przeszukuje w przód od tego punktu
ciąg
Określa przeszukiwany ciąg
Użycie
Możesz przeszukiwać w przód (jakie jest domyślne) używając ‘+’ lub w tył używając ‘-‘ . Jeśli
wpiszesz to polecenie bez parametrów, SoftICE użyje poprzedniego przeszukania zaczynając od
ostatnio znalezionego ciągu
Użyj pojedynczego znaku cudzysłowu dla przeszukania tekstu, który obejmuje spacje
Przykład
Wpisz poniższe polecenie aby znaleźć pierwsze załadowanie powiadomienia dla modułu net w
buforze historii
HS ‘load32 mod = net’
Zobacz
S, SS
HWND
OS
Windows 3.1, Windows 9x
Typ
Informacja systemowa
Definicja
Wyświetla informacje o uchwytach okna
Składnia
Dla Windows 3.1
HWND [poziom] [nazwa zadania]
Dla Windows 9x
HWND [-x] [hwnd | [[poziom][nazwa procesu]]
poziom
numer hierarchii Windows. 0 jest górnym poziomem, jeden jest kolejnym
poziomem i tak dalej. Poziomym okien przedstawiają związek rodzic
potomek. Na przykład poziom 1 okna ma poziom 0 rodzica
nawa zadania
dowolne aktualnie załadowane zadanie Windows. Nazwy te są dostępne
poleceniem TASK
-x
Wyświetla rozszerzoną informację o oknie
hwnd
Uchwyt okna
nazwa procesu
Nazwa dowolnego aktualnie załadowanego procesu
Użycie
Określenie uchwytu okna jako parametru wyświetli tylko informacje dla tego uchwytu okna. Jeśli
określisz uchwyt okna, nie musisz określać opcjonalnych parametrów dla poziomu i nazwy procesu.
Dane wyjściowe Dla każdego uchwytu okna wyświetlana jest następująca informacja:
Class Name
Nazwa klasy lub atomu klasy, do której to okno należy
Windows Procedure
Adres procedury okna dla tego okna
Przykład
Poniższy przykład wyświetla dane wyjściowe polecenia HWND dla procesu MSWORD z żadnymi
innymi ustawionymi parametrami
HWND msword
Handle
hQueue
Qowner
Class
Procedure
0F4C(0)
087D
MSWORD
#32769
DESKTOP
0FD4(1)
080D
MSWORD
#32768
MENUWND
22C4(1)
087D
MSWORD
OpusApp
0925:0378
53E0(2)
087D
MSWORD
OpusPmt
0945:1514
2764(2)
087D
MSWORD
a _sdm _Msft
0F85:0010
2800(3)
087D
MSWORD
OpusFedt
0F85:0020
2844(3)
087D
MSWORD
OpusFedt
0F85:0020
2428(2)
087D
MSWORD
OpusIconBar
0945:14FE
2888(2)
087D
MSWORD
OpusFedt
0945:14D2
Poniższy przykład wyświetla część danych wyjściowych polecenia HWND dla procesu WINWORD
z ustawioną opcją –x. Opcja –x wyświetla rozszerzoną informację o oknie
HWND -x winword
Window Handle
: (0288) Level (1)
Parent
: 16A7; 000204CC
Child
: NULL
Next
: 16A7: 00020584
Owner
: NULL
Window RECT
: (9, 113) – (210, 259)
Client RECT
: (10,114) – (189, 258)
hQueue
:1C97
Size
; 16
QOwner
: WINWORD
hrgnUpdate
: NULL
wndClass
: 16A7: 281C
Class
: ListBox
hInstance
: (349E) (hInstance 16 bitowy)
lpfnWndProc
:2417 : 000057F8
dwFlags1
:40002
dwStyle
: 44A08053
dwExStyle
: 88
dwFlags2
: 0
ctrlID/ hMenu
:03E8
WndText
: NULL
unknown1
:4734
propertyList
: NULL
lastActive
: NULL
hSystemMenu
: NULL
unknown2
: 0
unknown3
: 0000
classAtom
:C036
unknown4
: 4CAC
unknown5
:A0000064
HWND
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o uchwytach okna
Składnia
HWND [-x][-c] [typ hwnd | typ pulpitu | typ procesu | typ wątku | typ modułu | nazwa lasy]
-x
Rozszerzenie. Wyświetla rozszerzoną informację o każdym uchwycie okna
-c
Potomek. Wymusza wyświetlenie hierarchii okna kiedy przeszukujesz poprzez typ
wątku, typ modułu lub nazwę klasy
typ hwnd
Uchwyt okna lub wskaźnik do struktury okna
typ pulpitu
Uchwyt pulpitu lub wskaźnik pulpitu do struktury okna (tylko 3.51)
typ procesu, typ
wątku lub typ
modułu
Typ właściciela okna. Wartość którą SoftICE może interpretować jako będącą
określonym typem takim jak nazwa procesu, wątek ID lub obraz bazowy modułu
nazwa klasy
Nazwa zarejestrowanej klasy okna
Użycie
Polecenie HWND wylicza i wyświetla informacje o uchwytach okna. Polecenie to pozwala ci
Wyizolować okna, które są posiadane przez określony proces, wątek lub moduł, kiedy określisz
parametr właściwego typu. Opcja rozszerzenia (-x) pokazuje rozszerzoną informację o każdym
oknie. Kiedy określisz opcję rozszerzenia, lub typ właścicielski (typ procesu, typ wątku lub typ
modułu) jako parametr, polecenie HWND nie będzie automatycznie wyliczane okno potomne.
Określenie opcji potomka (-c) wymusza wyliczenie wszystkich okien potomnych bez względu na to
czy spełniają one określone kryteria przeszukania.
Dane wyjściowe Dla każdego HWND, które jest wyliczane wyświetlana jest następująca informacja:
Handle
Uchwyt HWND. Każdy uchwyt okna jest wcięty aby pokazać swoich potomków i
ich związków z innymi oknami.
Class
Nazwa zarejestrowanej klasy dla tego okna, jeśli jest dostępne.
WinProc
Adres komunikatu procedury połączenia zwrotnego. W zależności od typu
połączenia zwrotnego , wartość ta jest wyświetlana jako 32 bitowy adres płaski lub
16 bitowego selektor : offset
TID
Właściciel ID wątku
Module
Właściciel nazwy modułu (jeśli dostępny). Jeśli nazwa modułu nie jest znana,
uchwyt modułu będzie wyświetlony jako 32 bitowy adres płaski lub 16 bitowy
selektor : offset, w zależności od typu modułu
Przykład
Poniższy przykład używa polecenia HWND bez parametrów lub opcji
HWND
Handle
ClasWinProcTID
Module
01001E
#32769 (Desktop) 5FBFE42524 winsrv
050060
#32770 (Dialog) 60A2930418 winlogon
010044
SAS window class 022A49C418 winlogon
010020
#32768 (PopupMenu) 5FBEDBD524 winsrv
010022
#32769 (Desktop) 5FBFE42524 winsrv
010024
#32768 (PopupMenu) 5FBEDBD524 winsrv
030074
Shell_TrayWnd 0101775E67 Explorer
030072
Button 01012A4E67 Explorer
0800AA
TrayNotifyWnd 010216C467 Explorer
03003E
TrayClockWClass 01028C8567 Explorer
030078
MSTaskSwWClass 01022F6967 Explorer
030076
SysTabControl 132712188A86
Explorer
05007A
tooltips_class 327120B43A67 Explorer
03003C
tooltips_class 327120B43A67 Explorer
2E00F0
NDDEAgnt 016E18F14 Bnddeagnt
1C0148
CLIPBOARDWNDCLASS 034F : 29182C OLE2
9B0152
DdeCommonWindowClass 77C2D88B2C ole32
3200F2
OleObjectRpcWindow 77C2D73B2C ole32
0800A2
DdeCommonWindowClass 77C2D88B67 ole32
030086
OleMainThreadWndClass 77C2DCF267 ole32
030088
OleObjectRpcWindow 77C2D73B67 ole 32
03008A
ProxyTarget 71E6869A67 shell 32
03008C
ProxyTarget 71E6869A67 shell32
030070
ProxyTarget 71E6869A67 shell32
04007C
ProxyTarget 71E6869A67 shell32
0400CC
OTClass 0100D7F36 Explorer
0300CA
DDEMLEvent 5FC216AB67 winsrv
0300C6
DDEMLMom 60A2779D6700000000
0300C0
#420BB7 : 077678 MMSYSTEM
0300D2
WOWFaxClass 01F9F7A878 WOWEXEC
060062
ConsoleWindowClass 5FCD23C72B winsrv
0300B4
WOWExecClass 03CF : 0B3E78 WOWEXEC
030068
Progman 0101B1D367
Explorer
0E00BC
SHELLDLL_DefView 71E300E867 shell32
040082
SysListView 327121A0EC67 shell32
030080
SysHeader 327120B06F67 shell32
Notka: Dane wyjściowe z poprzedniego przykładu wyliczają dwa pulpity okien (uchwyt 1001E i
10022), każdy ze swoimi oddzielnymi oknami hierarchicznymi. Jest tak ponieważ ten system może
tworzyć więcej niż jeden obiekt typu Pulpit a każdy obiekt Pulpitu ma swój własny Pulpit Windows,
który definiuje hierarchię okna. Jeśli użyjesz polecenia HWND w kontekście, który nie ma
powiązanego Pulpitu, polecenie HWND wylicza wszystkie obiekty typu Pulpit.
Ponieważ system może tworzyć więcej niż jeden obiekt typu Pulpit, polecenie HWND akceptuje
uchwyt typu Pulpit jako parametr. Pozwala to hierarchii okna na wyliczenie określonego Pulpitu.
Możesz użyć polecenia OBJTAB DESK na wyliczenie wszystkich istniejących pulpitów w tym
systemie.
Poniżej jest przykład użycia polecenia HWND z określonym uchwytem okna
HWND 400a0
Handle
ClassWinProcTIDModule
0400A0
Progrman 0101B1D374 Explorer
Poniżej jest przykład wyliczenia tylko tych okien posiadanych przez wątek 74
HWND 74
Handle
ClassWinProcTIDModule
2F00F0
Shell_trayWnd 0101775E74 Explorer
0500CE
Button 01012A4E74 Explorer
0500C4
TrayNotifyWnd 010216c474 Explorer
040074 TrayClockWClass 01028C8574 Explorer
0500C6
MSTaskSwWClass 01022F6974 Explorer
0400C8 SysTabControl 132712188A874 Explorer
3700F2
tooltips_class 327120B43A74 Explorer
040066
tooltips_class 327120B43A74 Explorer
0F00BC
DdeCommonWindowClass 77C2D88B74 ole32
040068
OleMainThreadWndClass 77C2DCF274 ole32
0500CC
OleObjectRpcWindow 77C2D73B74 ole32
2600BA
ProxyTarget 71E6869A74 shell32
0400D0
ProxyTarget 71E6869A74 shell32
0400CA
ProxyTarget 71E6869A74 shell32
070094
ProxyTarget 71E6869A74 shell32
04009E
OTClass 0100D7F374 Explorer
480092
DDEMLEvent 5FC216AB74 winsrv
09004A
DDEMLMom 60A2779D7400000000
0400A0
Progman 0101B1D374 Explorer
0500C0
SHELLDLL_DefView 327121A0EC74 shell32
070090 SysListView 327121A0EC74 shell32
050096 SysHeader 327120B06F74 shell32
Notka: Nazwa procesu zawsze unieważnia moduł o tej samej nazwie. Dla przeszukania przez moduł,
kiedy jest konflikt nazw, użyj uchwytu modułu (adres bazowy lub selektor modułu
bazodanowego).Również nazwy modułów są zawsze kontekstowe. Jeśli moduł nie jest załadowany
w bieżącym kontekście (lub kontekście CSRSS), polecenie HWND interpretuje nazwę modułu jako
nazwę klasy
Poniższy przykład pokazuje dane wyjściowe kiedy użyto opcji rozszerzonej (-x)
HWND –x 400a0
Hwnd
: 0400A0
(7F2D7148)
Class Name
: Progman
Module
: Explorer
Window Proc
: 0101B1D3
Win Version
: 4.00
Title
: Progman Manager
Desktop
: 02001F
(00402D58)
Parent
: 010022
(7F2D0C28)
1
st
Child
: 0500C0
(7F2D7600)
Style
:CLIPCHILDREN | CLIPSIBLINGS | VISIBLE | POPUP
Ex. Style
: TOLWINDOW | A0000000
Window Rect
: 0, 0, 1024, 768 (1024 x 768)
Client Rect
: 0, 0, 1024, 768 (1024 x 768)
I
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Porty I/O
Definicja
Wprowadza wartości z portu I/O
Składnia
I [rozmiar] port
rozmiar
Wartość
Opis
B
bajt
W
słowo
D
DWORD
port
adres portu
Użycie
Użyj polecenia I do odczytu i wyświetlenia wartości z określonego portu sprzętowego. Dana
wejściowa może być z portów bajtu, słowa lub dwusłowa. Jeśli nie określisz rozmiaru, domyślnym
jest bajt.
Oprócz rejestrów maski przerwania, polecenie I wykonuje instrukcję I/O, więc wyświetla aktualny
stan portu sprzętowego. Jednakże, w przypadku portów wirtualizowanych, aktualna dana zwracana
przez polecenie I może nie być taka sama jak dana wirtualizowana, jaką widzi aplikacja.
Jedyne porty na których SoftICE nie wykonuje I/O są rejestrami maski przerwania (Port 21 i A1).Dla
tych portów SoftICE pokazuje te wartości, które istnieją kiedy pojawia się SoftICE.
Przykład
Poniższy przykład wykonuje wprowadzenie z portu 21, który jest rejestrem maski sterownika
przerwań
I 21
I1HERE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie trybem
Definicja
Pojawia się na wbudowanych instrukcjach INT 1
Składnia
I1HERE [on | off]
Użycie
Użyj polecenia I1HERE do określenia która z wbudowanych instrukcji przerwania 1 zainicjuje ekran
SoftICE. Cecha ta jest użyteczna dla zatrzymania programu w określonej lokacji. Kiedy I1HERE jest
włączone, SoftICE sprawdza aby zobaczyć czy przerwaniem jest rzeczywiście INT 1 w kodzie ,zanim
się pojawi. Jeśli nie jest to INT 1, SoftICE nie będzie się pojawiał.
Aby użyć tej cechy umieść INT 1 w kodzie bezpośrednio przed lokacją gdzie chcesz się zatrzymać.
Kiedy wystąpi INT1, zainicjuje ekran SoftICE. W tym punkcie, bieżący EIP jest instrukcja po
instrukcji INT1. Jeśli nie określisz parametru, wyświetli się bieżący stan I1HERE. Domyślnie
I1HERE jest wyłączony.
Polecenie to jest użyteczne kiedy używasz aplikacji diagnostycznej takiej jak BoundsChecker.
Ponieważ te narzędzia polegają na INT 3 dla powiadomienia punktu przerwania, I1HERE pozwala ci
użyć INT 1 jako stałego przerwania w twoim kodzie bez wyzwalania aplikacji diagnostycznej.
Dla Windows 3.1 i Windows 9x
VMM, zarządzanie pamięcią Windows VxD, wykonuje instrukcję INT 1 przed pewnymi zgubnymi
wyjściami. Jeśli masz I1HERE ON, możesz je śledzić. INT1 generowany przez VMM jest bardzo
często powodowany przez błąd strony z rejestrami ustawionymi jak następuje:
*EAX = adres zakłócenia
*ESI wskazuje komunikat ASCII
*EBP wskazuje na CRS (Struktura Rejestru Obszaru Roboczego jako zdefiniowana w DDK
obejmująca plik VMM.INC)
Przykład
Poniższy przykład włącza tryb I1HERE. Dowolny INT 1 jest generowany pop tym punkcie inicjuje
ekran SoftICE
I1HERE on
I3HERE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie trybem
Definicja
Pojawia się na instrukcji INT3
Składnia
I3HERE [on | off | DRV]
DRV
Włącza obsługę INT 3 tylko powyżej 2GB. Obsługuje pułapkowanie
funkcji sterownika DebugBreak()
Użycie
Użyj polecenia I3HERE do określenia które przerwanie 3 spowoduje pojawienie się SoftICE. Cecha
ta jest użyteczna dla zatrzymania programu w określonej lokacji. Aby użyć tej cechy ustaw włączony
I3HERE i umieść instrukcję I3HERE w kodzie bezpośrednio przed lokacją gdzie chcesz się
zatrzymać. Kiedy wystąpi INT 3, zainicjuje ekran SoftICE. W tym punkcie, bieżący EIP jest
instrukcją po instrukcji INT 3
Kiedy tworzysz program Windows, podprogram API Windows DebugBreak() wykonuje INT 3. Jeśli
nie określisz parametru, wyświetli się bieżący stan I3HERE
Notka: Jeśli używasz aplikacji diagnostycznej takiej jak debugger Visual C lub CompuWare
BoiundsChecker, powinieneś umieścić instrukcję INT 1 w kodzie zamiast INT 3.
Przykład
Poniższy przykład włącza tryb I3HERE. Dowolny INT 3 generowany po tym punkcie powoduje
pojawienie się SoftICE
I3HERE
Kiedy polecenie I3HERE == ON, i używasz debuggera poziomu 3 takiego jak BoundsChecker,
SoftICE pułapkuje na dowolnym punkcie przerwania INT 3 zainstalowanym przez debugger poziomu
3. Poniższy przykład pokazuje jak uniknąć takiej sytuacji. Ustaw I3HERE ==OFF i użyj polecenia
GENINT dla reaktywacji tego punktu przerwania. Zwróci to sterowanie do debuggera poziomu 3 a
SoftICE nie będzie pułapkowany na dalszych INT3
I3HERE off
GENINT 3
Zobacz
GENINT; I1HERE; SET
IDT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla Tablicę Deskryptorów Przerwań
Składnia
IDT [numer przerwania | adres bazowy IDT]
numer przerwania
Numer przerwania o którym wyświetlamy informację
adres bazowy IDT
Granica i adres podstawowy IDT
Użycie
Polecenia IDT wyświetla zawartość Tabeli Deskryptorów Przerwań po odczytaniu rejestru IDT dla
uzyskania jego adresu. Polecenie IDT bez parametrów wyświetla granicę i adres podstawowy IDT,
jak również zawartość wszystkich wejść w tej tablicy. Jeśli określisz opcjonalnie numer przerwania
lub adres bazowy IDT, będzie wyświetlona informacja tylko o tym wejściu
Dla rodziny Windows NT
Prawie wszystkie programy obsługi przerwań rezydują w NTOSKRNL, więc jest bardzo użyteczne
mieć załadowane eksporty dla niego aby wyświetlono nazwy programów obsługi.
Notka: NTOSKRNL musi być bieżącą tablicą symboli dla oglądania nazw symboli.
Dane wyjściowe Każda wyświetlana lini zawiera następujące informacje:
numer przerwania
0 00FFh (5Fh dla Windows 3.1, Windows 9x)
typ przerwania
Typ
Opis
CallG32
32 bitowa bramka wywołania
CallG16
16 bitowa bramka wywołania
TaskG
Bramka zadania
TrapG16
16 bitowa bramka pułapki
TrapG32
32 bitowa bramka pułapki
IntG32
32 bitowa bramka przerwania
IntG16
16 bitowa bramka przerwania
adres
Selektor : offset programu obsługi przerwania
selektor DPL
Selektor poziomu uprzywilejowania deskryptora (DPL), który jest
0, 1 ,2 lub 3
bit obecności
P lub NP., wskazując czy wejście jest obecne czy nie
Właściciel + offset
Dla Windows 9x i rodziny Windows NT tylko: Symbol lub nazwa
właściciela plus offset tego symbolu lub właściciela
Przykład
Poniższy przykład pokazuje część danych wyjściowych polecenia IDT bez żadnych parametrów
IDT
Int
Type
Sel:Offset
Attributes
Symbol/Owner
IDTbaze=C000ABBC
Limit= 02FF
0000
IntG32
0028:C0001200
DPL=0 P
VMM(01)+0200
0001
IntG32
0028:C0001210
DPL=3 P
VMM(01)+0210
0002
IntG32
0028:C00EEDFC
DPL=0 P
VTBS(01)+1D04
0003
IntG32
0028:C0001220
DPL=3 P
VMM(01)+0220
0004
IntG32
0028:C0001230
DPL=3 P
VMM(01)+0230
0005
IntG32
0028:C0001240
DPL=3 P
VMM(01)+0240
0006
IntG32
0028:C0001250
DPL=0 P
VMM(01)+0250
0007
IntG32
0028:C0001260
DPL=0 P
VMM(01)+0260
0008
TaskG
0068:00000000
DPL=0 P
0009
IntG32
0028:C000126C
DPL=0 P
VMM(01)+026C
000A
IntG32
0028:C000128C
DPL=0 P
VMM(01)+028c
Poniższy przykład pokazuje zawartość jednego wejścia w IDT
IDT d
Int
Type
Sel:Offset
Attribute
Symbol/Owner
000D
IntG32
0028:C00012B0
DPL=0 P
VMM(01)+02B0
INTOBJ
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o obiektach przerwania systemu
Składnia
INTOBJ [wektor | adres obiektu przerwania]
Użycie
Polecenie INTOBJ wyświetla informację o obiektach przerwań, które są aktualnie w systemie. Jeśli
wpiszesz INTOBJ bez parametrów, SoftICE wylistuje wszystkie obiekty przerwań z następującą
informacją:
*Adres Obiektu
*Wektor
*Adres Usługi
*Kontekst Usługi
*IRQL
*Tryb
*Maska afiniczna
*Symbol
Jeśli wyemitujesz polecenie z wektorem lub adresem, SoftICE wyświetli informację o określonym
obiekcie przerwania.
Przykład
Poniższy przykład wyświetla informację o wszystkich bieżących obiektach przerwań w systemie
INTOBJ
Object
Service
Service
Affinity
Address
Vector Address
Context
IRQL
Mode
Mask
807D0D88
31
80802D90
807D1030
1A
Edge
01
80750D88
33
808030F0
807500F8
18
Edge
01
80750B08
34
808030F0
807513F8
17
Edge
01
807E0968
35
80802D30
807E1008
16
Edge
01
807E28A8
39
80802D50
807E9C48
12
Edge
01
80792D88
3B
80802ED0
8078D158
10
Level
01
807D18C8
3C
80802D70
807D1030
0F
Edge
01
808F2428
3E
8022BF58
808F2850
0D
Edge
01
SCSIPORT! .text +0C98
807EB428
3F
8022BF58
807EB850
0C
Edge
01
Poniższy przykład pokazuje informacje SoftICE wyświetlane dla określonego obiektu przerwania
INTOBJ 31
Interrupt Object at 807D0D88
Length; 01E4
List Forward Link: 807D0D8C
Object List Back Link: 807D0D8C
Interrupt Service Routine address: 800802D90
Interrupt Service Routine context; 807D1030
Spinlock: 807D155C
Vector; 31
Device IRQL: 1A
Save Floating Point; FALSE
Processor Affinity Mask; 01
Processor Name: 00
Share interrupt; TRUE
Interrupt mode; Edge
IRB
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Dekoduje 1394 Blok Żądania I/O (IRB)
Składnia
IRB [-r] pirb
-r
Wyświetla pola zarezerwowane
pirb
Wskaźnik do IRB
Użycie
Polecenie IRB będzie interpretował i poddawał analizie składniowej pakiet 1394 IRB. Informacja,
która jest wyświetlana jest oparta o informację zawartą w pliku nagłówkowym DDK 1394.h
Notka: Adres określony będzie założony jako pakiet IRB. Nie jest robione żadne potwierdzenie a
użytkownik jest odpowiedzialny za zlokalizowanie adresu pakietu IRB
Przykład
Niektóre przykłady użycia polecenia IRB są pokazane poniżej
:IRB 0xFFA40C68
IRB at address FFA40C68
FunctionNumber=0x6
(REQUEST_ISOCH_ATTACH_BUFFERS)
Flags=0x0
hResource
:80CDB008
nNumberOfDescription
:00000001
pIsochDescriptor
ISOCH_DESCRIPTOR (1 of 1)
FulFlags
:00000001
Mdl
:80D48578
ulLength
:00025800
nMaxbytesPerFrame
:00000280
ulSynch
:00000001
ulTag
:00000000
CycleTime
CYCLE_TIME
CL_cycleCount :00000000
CL_CycleOffset :00000000
CL_SecondCount:00000000
Callback
:FC602C50
Context1
:80DAA390
Context2
:FFA40C68
status
:00000000
DeviceReserved [0]
:00000001
DeviceReserved [1]
:80D422B0
DeviceReserved [2]
:FF9F08D8
DeviceReserved [3]
:00000000
DeviceReserved [4]
:00000000
DeviceReserved [5]
:00000000
DeviceReserved [6]
:00000000
DeviceReserved [7]
:00000000
:IRB -r 0xFFA40C68
IRB at address FFA40C68
FunctionNumber =0x6
(REQUEST_ISOCH_ATTACH_BUFFERS)
Flags = 0x0
hResource
:80CDB008
nNumberOfDescriptors
:00000001
pIsochDescriptor
ISOCH_DESCRIPTOR (1 of 1)
fulFlags
:00000001
Mdl
:80D48578
ulLength
:00025800
nMaxBytesPerFrame
:00000280
ulSynch
:00000001
ulTag
:00000000
CycleTime
CYCLE_TIME
CL_CycleCount :00000000
CL_CycleOffset :00000000
CL_SecondCount :00000000
Callback
:FC602C50
Contex1
:80DAA390
Context2
:FA40C68
status
:00000000
DeviceReserved [0]
: 00000001
DeviceReserved [1]
: 80D422B0
DeviceReserved [2]
: FF9F08D8
DeviceReserved [3]
: 00000000
DeviceReserved [4]
: 00000000
DeviceReserved [5]
: 00000000
DeviceReserved [6]
: 00000000
DeviceReserved [7]
:00000000
BusReserved [0]
:00000000
BusReserved [1]
:00000000
BusReserved [2]
:00000000
BusReserved [3]
:00000000
BusReserved [4]
:00000000
BusReserved [5]
: 00000000
BusReserved [6]
:00000000
BusReserved [7]
: 00000000
PortReserved [0]
: 00000000
PortReserved [1]
: 00000000
PortReserved [2]
: 00000000
PortReserved [3]
: 00000000
PortReserved [4]
: 00000000
PortReserved [5]
: 00000000
PortReserved [6]
: 00000000
PortReserved [7]
: 00000000
:
Zobacz
IRP
IRP
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o Pakiecie Żądania I/O
Składnia
IRP [-f | -n | -p | -a] pirp
-f
Wyświetla wszystkie lokacje stosu IRP
-n
Wyświetla kolejną lokację stosu IRP
-p
Przechodzi do poprzedniej lokacji stosu
-a
Iteracja przez wszystkie wątki w systemie i pokazuje IRP dla każdego wątku
pirp
Wskaźnik do początku struktury IRP będącej wyświetlaną
Użycie
polecenie IRP wyświetla zawartość Pakietu Żądania I/O i zawartość powiązanej bieżącej lokacji stosu
I/O pod określonym adresem .Zauważ ,że polecenie to nie sprawdza poprawności struktury IRP pod
określonym adresem, więc będzie akceptowany dowolny adres przez SoftICE jako adres IRP.
Ostrożnie przekazuj do polecenia IRP poprawny adres IRP. Pola IRP pokazywane przez SoftICE nie
są udokumentowane w całości tutaj, po więcej informacji sięgnij do pliku NTDDK.H w DDK. Kilka
pól zasługuje na specjalną uwagę, jednak , ponieważ piszący sterowniki uznają je za szczególnie
użyteczne:
Flags
Flagi
używane do zdefiniowania atrybutów IRP
StackCount
Liczba lokacji stosu, którą zaalokowano dla IRP. Powszechnym błędem
sterowników jest uzyskiwanie dostępu do nie istniejących lokacji stosu,
więc wartość ta może być użyteczna w określaniu kiedy to nastąpi.
CurrentLocation
Liczba ta wskazuje jaka lokacja stosu jest obecnie dla IRP. Znowu, wartość
ta w połączeniu ze StackCount może być użyta do wyśledzenia błędów
stosu IRP.
Cancel
Ta wartość boolowska jest ustawiana na TRUE jeśli IRP został anulowany
jako wynik wywołania funkcji unieważnienia IRP. Zdarza się to kiedy
Wynik IRP nie jest dłużej potrzebny a IRP będzie zakończony
Tail.Overlay
CurrentStackLoc
Adres bieżącej lokacji stosu. Zawartość tej lokacji stosu jest wyświetlana
po IRP, ilustracja jest podana w Przykładzie
Pola te w mogą być użyteczne w bieżącej lokacji stosu:
Major Function i
Minor Function
Pola te wskazują jaki typ żądania będzie używany przez IRP. Funkcja
major jest używana w określaniu jaki program obsługi żądania będzie
anulowany kiedy IRP zostanie odebrany przez sterownik
DeviceObject
Wskaźnik do obiektu sterownika przy którym aktualnie stacjonuje IRP
Innymi słowy, IRP jest tam wysyłany przez, i jest w procesie będącym
odbieranym przez sterownik posiada obiekt sterownika
FileObject
Wskaźnik do pliku obiektu powiązanego z IRP. Może zawierać dodatkowe
informacje, które służą jako parametry IRP. Na przykład, system plików
sterowników używa pola nazwy ścieżki dostępu do pliku obiektu dla
określenia pliku docelowego żądania.
Completion Routine
Pole to jest ustawione kiedy sterownik ustawia kompletny podprogram dla
IRP poprzez wywołanie IoSetComletionRoutine. Wartość ta jest adresem
podprogramu , jaki będzie wywołany kiedy sterownik najniższego poziomu
(powiązany z lokacją stosu większym niż bieżący) zakończy obsługiwanie
IRP a sygnalizuje ,że wykonał IoCompleteRequest
Przykład
Poniższy przykład pokazuje dane wyjściowe polecenia IRP
IRP eax
MdlAddress *
:00000000
Flags
:00000404
IRP_SYNCHRONOUS_API | IRP_CLOSE_OPERTION
AssociatedIrp
: 00000000
&ThreadListEntry
:FD8D9B18
IoStatus
:00000000
Requestormode:
:00
PendingReturned
:False
StackCount
:03
CurrentLocation
:03
Cancel
:False
CancelIrql
:00
ApcEnvironment
:00
Zoned
:True
UserIosb
*
:FD8D9B20
UserEvent
*
:FB11FB40
Overlay
:00000000 00000000
CancelRoutine *
:00000000
UserBuffer
*
:00000000
Tail.Overlay
&DeviceQueueEntry
:FD8D9B48
Thraed *
:FD80A020
AuxilaryBuffer *
:00000000
&ListEntry
:FD8D9B60
CurrentStackLoc *
:FD8D9BC0
OrigFileObject *
:FD819E08
Tail.Apc
*
:FD8D9B48
TailCompKey
:00000000
CurrentStackLocation:
Major Function
:12 IRP_MJ_CLEANUP
Minor Function
:00
Control
:00
Flags
:00
Others
: 00000000 00000000 00000000 00000000
DeviceObject
*
FD851E40
FileObject
*
:FD819E08
CompletionRout *
:00000000
Context *
: 00000000
Zobacz
IRB
IRQ
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o systemie przerwań sprzętowych (IRQ’ach)
Składnia
IRQ [numer irq]
numer irq
określony IRQ będący wyświetlanym
Użycie
Polecenie IRQ będzie wyświetlało informację o przerwaniach sprzętowych (IRQ’ach) w systemie.
Wydanie polecenia IRQ bez żadnych parametrów będzie wyświetlało listę wszystkich przerwań
sprzętowych w systemie wraz z przydzielonym wektorem i informacją o statusie. Dane wyjściowe z
tego plecenia różnią się w zależności czy maszyna jest wyposażona w PIC 8259 czy APIC. Na
maszynie PIC, polecenie IRQ będzie raportowało wektor i status (zamaskowane / nie zamaskowane)
dla każdego IRQ w systemie. Pole wektora jest indeksem do Tablicy Deskryptorów Przerwań, i może
być użyte z poleceniem IDT SoftICE do zlokalizowania podprogramu obsługi przerwań związanego z
przerwaniem sprzętowym. Pole statusu wskazuje czy przerwanie sprzętowe jest aktualnie
zamaskowane przez sterownik przerwań.
W systemie APIC, polecenie IRQ pobiera informację przez odczyt I/O APIC. Polecenie to wyświetla
wektor, tryb dostarczania, status, tryb wyzwalania i informacje przeznaczone dla każdego IRQ.
Ponieważ w wersji PIC polecenia IRQ, numer wektora jest offsetem do systemowego IDT, może
być użyte do zlokalizowania podprogramu obsługi przerwań dla przerwania sprzętowego. Dla
pełnego wyjaśnienia pozostałych informacji raportowanych przez polecenie IRQ, odnieś się do
dokumentacji I/O APIC
Przykład
Poniższy przykład pokazuje dane wyjściowe z polecenia IRQ na maszynie wyposażonej w PIC
IRQ
IRQ
Vector
Status
00
30
Nie zamaskowane
01
31
Nie zamaskowane
02
32
Nie zamaskowane
03
33
Nie zamaskowane
04
34
Nie zamaskowane
05
35
Zamaskowane
06
36
Zamaskowane
07
37
Zamaskowane
08
38
Nie zamaskowane
09
39
Nie zamaskowane
0A
3A
Zamaskowane
0B
3B
Zamaskowane
0C
3C
Nie zamaskowane
0D
3D
Zamaskowane
0E
3E
Nie zamaskowane
0F
3F
Nie zamaskowane
A tu mamy dane wyjściowe polecenia IRQ na maszynie APIC
IRQ
Inti
Vector
Delivery
Status
Trigger
Dest
Mode
Destiantion
01
93
Low. Pri
Idle
Edge
Logical
0 1
03
B2
Low. Pri
Idle
Edge
Logical
0 1
04
92
Low. Pri
Idle
Edge
Logical
0 1
08
D1
Fixed
Idle
Edge
Logical
0
09
B1
Low. Pri
Pending
Level
Logical
0 1
0E
62
Low. Pri
Idle
Edge
Logical
0 1
0F
82
Low. Pri
Idle
Edge
Logical
0 1
10
83
Low. Pri
Pending
Level
Logical
0 1
11
63
Low. Pri
Idle
Level
Logical
0 1
13
B4
Low. Pri
Pending
Level
Logical
0 1
17
73
Low. Pri
Pending
Level
Logical
0 1
I/O unit id register: 02000000
I/O unit version register: 00178020
Jednym z zastosowań polecenia IRQ jest identyfikacja podprogramu obsługi przerwań związanego z
określonym urządzeniem w systemie. Ten końcowy przykład ilustruje zastosowanie poleceń SoftICE
do określenia adresu ISR dla host kontrolera USB
Najpierw polecenie USB zwraca adresy PCI wszystkich host kontrolerów USB w systemie:
USB
3 USB Host Controllers Found
HC 0: UHCI at PCI Bus 0 Device 1F Function 2
HC 1: UHCI at PCI Bus 0 Device 1F Function 4
HC 2: OHCI at PCI Bus 4 Device F Function 0
Następnie używamy polecenia PCI do określenia lini przerwania związanego z host kontrolerem
przez OS. W tym przypadku pobieramy linię przerwania dla pierwszego z tych wylistowanych
powyżej host kontrolerów:
PCI 0 1f 2
Bus
00
Device 1F
Function 02
Vendor: 8086 Intel Corporation
Device: 2442
Revision: 04
Device class:
0C Serial bus controller
Device subclass: 03 Universal Serial Bus controller
Device sub –subclass:
00
Base address 4: 0000FF80
32 bytes I/O
Interrupt line: 13
Interrupt pin: 04 Min_Gnt: 00
MaxLat:00
Cache line size: 00
Latency timer: 00 Header type: 00
BIST: 00
Command Register:
I/O:1
Mem:0 BusMast:1
Special: 0
MemInv: 0
Parity: 0 Wait:0 SERR: 0
Back2Back:0
Snoop:0
Status Register:
Caps:0 66MHz Cap:0
UDF:0 FB2B Cap: 1
DevSel; Medium
PERRDet: 0 PERRcvd: 0 TASgnld:0
TARcvd:0
MARcvd:0
SERRSgnld:0
Zauważ, że linia przerwania jest ustawiona na 13 dla tego urządzenia. Teraz wydamy polecenie IRQ,
określające linię przerwania z polecenia PCI:
IRQ 13
Inti
Vector
Delivery
Status
Trigger
Dest
Mode
Destiantion
13
B4
Low. Pri
Pending
Level
Logical 0 1
I/O unit id register: 02000000
I/O unit version register: 00178020
Mówi to nam ,że wektor przerwania powiązany z tym urządzeniem to B4. W końcu używamy
polecenia IDT do pobrania adresu ISR:
IDT b4
Int
Type
Sel :Offset
Attributes
Symbol / Owner
00B4
IntG32
0008:827D8BEC
DPL=0 P
Polecenie IDT pokazuje, ze adres ISR dla tego host kontrolera USB to 008:827D8BEC
KEVENT
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla Zdarzenia Jądra
Składnia
KEVENT [zdarzenie jądra]
Zdarzenie jądra
adres zdarzenia jądra
Użycie
Polecenie KEVENT wyświetla informacje o zdarzeniach jądra, które są aktualnie w systemie. Jeśli
wpiszesz KEVENT bez parametrów, SoftICE przejdzie przez katalog BaseNamedObjects gdzie
podsystem Win32 zazwyczaj przechowuje nazwane obiekty jądra i wyświetli Zdarzenia Jądra z tej
listy. Jeśli określisz adres zdarzenia jądra, SoftICE wyświetli informacje o tym określonym zdarzeniu
Przykład
Poniższy przykład pokazuje jak użyć polecenia KEVENT dla wyświetlenia informacji o określonym
zdarzeniu
KEBVENT 807AB730
Address
Type
State
Name
807AB730
Notification
Signalled
LSA_RPC_SERVER_ACTIVE
Zobacz
KMUTEX, KSEM
KMUTEX
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o muteksach jądra
Składnia
KMUTEX [muteks jądra]
muteks jądra
adres muteksu jądra
Użycie
Jeśli wydasz polecenie KMUTEX bez żadnych parametrów, SoftICE przejdzie przez katalog
BaseNamedObjects, gdzie podsystem Win32 zazwyczaj przechowuje nazwane obiekty jądra i
wyświetli informacje o wszystkich muteksach jądra z tej listy.
Jeśli wydasz polecenie KMUTEX z wyrażeniem, SoftICE wyświetli informacje o muteksie jądra
spod tego adresu
Przykład
Poniższy przykład pokazuje jak użyć polecenia KMUTEX do wyświetlenia informacji o określonym
obiekcie
KMUTEX 80733470
Address
State
Own.KTEB (TID) Aban
APC
Name
80733470
Signalled 0 ( 0)
N 0
OLESharedTableMutex
Zobacz
FMUTEX; KEVENT; KSEM
KSEM
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informacje o semaforach jądra
Składnia
KSEM [adres semafora]
adres semafora
Adres obiektu semafora jądra
Użycie
Jeśli wydasz polecenie KSEM bez żadnych parametrów, SoftICE przejdzie przez katalog
BaseNamedObjects, gdzie podsystem Win32 zazwyczaj przechowuje nazwane obiekty jądra i
wyświetli informacje o wszystkich semaforach jądra z tej listy.
Jeśli wydasz polecenie KMUTEX z wyrażeniem, SoftICE wyświetli informacje o semaforach jądra
spod tego adresu
Przykład
Poniższy przykład pokazuje jak użyć polecenia KSEM dla wyświetlenia informacji o określonym
obiekcie semafora
KSEM 807060F0
Addres
Limit
State
Name
807060F0
1
Signalled
NDDEAgent
Zobacz
KEVENT; KMUTEX
LDT
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla Tablicę Lokalnych Deskryptorów
Składnia
LDT [selektor]
Selektor
Początkowy selektor LDT do wyświetlenia
Użycie
Polecenie LDT wyświetla zawartość Tablicy Lokalnych Deskryptorów po odczytaniu jej lokacji z
rejestru LDT. Jeśli nie ma żadnej LDT, pokaże się komunikat błędu. Jeśli określisz opcjonalny
selektor, zostanie wyświetlona informacja tylko o tym selektorze. Jeśli selektor początkowy jest
selektorem Tablicy Globalnych Deskryptorów (GDT) (to znaczy bit 2 jest równy 0), zostanie
wyświetlona GDY zamiast LDT. Pierwsza linia danych wyjściowych zawiera adres bazowy i granicę
tego LDT
Dla Windows 9x i rodziny Windows NT
Nawet jeśli nie ma żadnej LDT, polecenie LDT może wyświetlić LDT jaką dostarczysz jako
parametr polecenia. Ten opcjonalny parametr może być selektorem GDT, który reprezentuje LDT.
Możesz zlokalizować selektory typu LDT poleceniem GDT
Dla rodziny Windows NT
Polecenie LDT jest określonym procesem i działa tylko w procesach mających LDT. Użyj polecenia
ADDR do określenia jaki proces zawiera LDT’y. Użyj ADDR do przełączenia do tego procesu,
potem użyj polecenia LDT dla sprawdzenia ich LDT’ów
Dane wyjściowe Każda wyświetlana linia zawiera następujące informację:
wartość selektora
Niższe dwa bity tej wartości odzwierciedla poziom
uprzywilejowania deskryptora
typ selektora
Typ
Opis
Code16
16 bitowy selektor kodu
Data16
16 bitowy selektor danych
Code32
32 bitowy selektor kodu
Data32
32 bitowy selektor danych
CallG32
32 bitowy selektor bramki wywołania
CallG16
16 bitowy selektor bramki wywołania
TaskG32
32 bitowy selektor bramki zadań
TaskG16
16 bitowy selektor bramki zadań
TrapG32
32 bitowy selektor bramki pułapki
TrapG16
16 bitowy selektor bramki pułapki
IntG32
32 bitowy selektor bramki przerwań
IntG16
16 bitowy selektor bramki przerwań
Reserved
selektor zarezerwowany
selektor bazowy
Bazowy adres liniowy selektora
granica selektora
Rozmiar tego selektora
DPL selektora
Poziom uprzywilejowania deskryptora (DPL), albo 0, 1, 2 lub 3
bit obecności
P lub NP., wskazujący czy selektor jest obecny czy nie
atrybuty segmentu
Jeden z następujących:
Typ
Opis
RW
Selektor danych jest odczytywalny i zapisywalny
RO
Selektor danych jest tylko do odczytu
RE
Selektor kodu jest odczytywalny i wykonywalny
EO
Selektor kodu jest tylko do wykonania
B
Ustawiony bit zajętości TSS
Przykład
Poniższy przykład pokazuje próbkę danych wyjściowych polecenia LDT
LDT
Sel.
Type
Base
Limit
DPL
Attributes
LDTbase =8008B000
Limit= 4FFF
0004
Reserved
00000000
00000000
0
NP.
000C
Reserved
00000000
00000000
0
NP.
0087
Data16
80001000
00000FFF
3
P RW
008F
Data16
00847000
0000FFFF
3
P RW
0097
Data16
0002DA80
0000021F
3
P RW
009F
Data16
00099940
000029FF
3
P RW
00A7
Data16
0001BAC0
000000FF
3
P RW
00AF
Data16
C11D9040
0000057F
3
P RW
LHEAP
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla lokalną stertę Windows
Składnia
LHEAP [selektor | nazwa modułu]
selektor
selektor danych LDT
nazwa modułu
Nazwa dowolnego modułu 16 bitowego
Użycie
Polecenie LHEAP wyświetla obiekty danych, które program Windows zaalokował na lokalnej stercie.
Jeśli nie określisz selektora, użyta będzie bieżąca wartość rejestry DS. Określony selektor jest
zazwyczaj selektorem danych programu Windows. Dla jego znalezienia użyj polecenia HEAP w
programie Windows jaki cię interesuje w poszukaj wejścia typu danych. Każdy selektor który zawiera
lokalną stertę jest oznaczony znacznikiem LH. Jeśli jest wpisana nazwa modułu, SoftICE użyje
domyślnych modułów segmentu danych dla przejścia przez stertę
Dla Windows 9x i rodziny Windows NT
Aby znaleźć wszystkie segmenty ,które zawierają stertę lokalną, użyj polecenia HEAP z opcją –L
Dla rodziny Windows NT
Polecenie LHEAP działa tylko jeśli bieżący proces zawiera okienko WOW
Dane wyjściowe Dla każdego wejścia lokalnej sterty wyświetlana jest następująca informacja:
offset
16 bitowy względny offset do określonego selektora adresu bazowego
rozmiar
Rozmiar wejścia sterty w bajtach
typ
Typ wejścia. Jedne z poniższych
Typ
Opis
FIX
Stały (nie przenośny)
MOV
Przenośny
FREE
Dostępna pamięć
uchwyt
Uchwyt powiązany z każdym elementem. Dla stałych elementów, uchwyt
jest równy adresowi zwracanemu przez LocalAlloc(). Dla elementów
przesuwalnych, uchwyt jest adresem, który będzie przekazany do
LocalLock().
Na końcu listy wyświetlana jest całkowita ilość pamięci na stercie lokalnej
Przykład
Poniższe polecenie wyświetla wszystkie wejścia sterty lokalnej należące do domyślnej lokalnej sterty
GDI
LHEAP gdi
Offset
Size
Type
Handle
93D2
0046
Mov
0DFA
941E
0046
Mov
0C52
946A
0046
Mov
40DA
94B6
004E
Mov
0C66
950A
4A52
Mov
0E52
Used: 19.3 K
LINES
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Zmienia numer lini wyświetlanej przez SoftICE
Składnia
Dla Windows 3.1
LINES [25 | 43 | 50]
Dla Windows 9x i rodziny Windows NT
Z Uniwersalnym Sterownikiem Video:
LINES liczba lini
Liczba lini
Liczba lini ekranu. Ustawiona wartość od 25 do 128
Ze Sterownikiem tekstowym Video VGA
LINES [25 | 43 | 50 |60]
Użycie
Polecenie LINES zmienia tryb wyświetlania znaków SoftICE. Dla Sterownika Tekstowego VGA,
zezwala na różne tryby wyświetlania: 25 linii, 43 lini 50 lini i 60 lini. Tryby 50- i 60 liniowe są
poprawne tylko z kartami VGA. Dla Uniwersalnego Sterownika Video, możesz określić liczbę lini
większą niż 25. Zastosowanie LINES bez żadnych parametrów wyświetla bieżący stan LINES.
Domyślną liczbą wyświetlanych lini jest 25.
Jeśli wpiszesz polecenie ALTSCR, SoftICE zmieni na tryb 25 liniowy automatycznie. Jeśli zmienisz
ponownie na VGA i chcesz większy tryb linii, wpisz ponownie polecenie LINES. Dla wyświetlenia
trybu 50 liniowego na terminalu szeregowym, najpierw umieść tryb konsoli terminala szeregowego w
trybie 50 liniowym używając polecenia DOS MODE.
Dla Windows 9x i rodziny Windows NT
Możesz wyświetlić 60 lini dla pojedynczej diagnostyki monitora. Kiedy diagnozujesz w trybie
szeregowym, wszystkie linie zliczane są obsługiwane dla karty VGA
Przykład
Poniższe polecenie zmienia wyświetlanie SoftICE na 53 linie używając Uniwersalnego Sterownika
Video. Aktualna czcionka wpływa na liczbę lini jaką może wyświetlić SoftICE
LINES 53
Zobacz
SET; WIDTH
LOCALS
OS
Windows 9x i rodzina Windows NT
Typ
Polecenie Symbol / Źródło
Definicja
Lista lokalnych zmiennych z bieżącej ramki stosu
Składnia
LOCALS
Użycie
Użyj polecenia LOCALS do wylistowania lokalnych zmiennych z bieżącej ramki stosu do okna
Poleceń
Dane wyjściowe Poniższe informacje są wyświetlane dla każdego lokalnego symbolu:
*Offset Stosu
*Definicja typu
*Wartość, Dana lub struktura symbolu ({...})
Typ lokalnej zmiennej określa czy wartość, dana lub struktura symbolu ({...}) jest wyświetlona. Jeśli
lokalnym jest wskaźnik, jest wyświetlona dana na którą wskazuje. Jeśli jest to struktura, symbol
struktury jest wyświetlany. Jeśli lokalnym nie jest ani wskaźnik ani struktura, wyświetlana jest
wartość.
Notka: Możesz rozszerzyć struktury, tablice i ciągi znaków dla wyświetlania ich zawartości. Użyj
polecenia WL do wyświetlenia okna Local, potem kliknij podwójnie na pozycji jaką chcesz
rozszerzyć. Rozszerzone pozycje są określone znakiem (+)
Przykład
Poniższy przykład wyświetla zmienne lokalne dla bieżącej ramki stosu
LOCALS
[EBP-4] struct_BOUNCEDATA * pdb = 0x0000013F <{...}>
[EBP+8] void * hWnd=0x000006D8
Zobacz
TYPES; WL
M
OS
Windows 3.1, Windows 9x i rodziny Windows NT
Typ
Różne
Definicja
Przesuwanie danych
Składnia
M. adres źródłowy l długość adres przeznaczenia
adres źródłowy
Początkowy adres zakresu do przesunięcia
długość
Długość w bajtach
adres przeznaczenia
Początkowy adres zakresu przeznaczenia
Użycie
Określona liczba bajtów jest przesuwana od adresu źródłowego do adresu przeznaczenia
Przykład
Poniższe polecenie przesuwa 2000h bajtów (8KB) z komórki pamięci DS:1000h do ES:5000h
M. ds.:1000 l 2000 es:5000
MACRO
OS
Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Definiuje nowe polecenie , które jest podzbiorem poleceń SoftICE
Składnia
MACRO [nazwa makra] | [*] | [ = „treść makra”]
nazwa makra
Nie rozróżniająca wielkości liter, 3-8 znakowa nazwa dla makra będącego
definiowanym, lub nazwa istniejącego makra
treść makra
Stała łańcuchowa , która zwiera listę poleceń SoftICE i parametry
oddzielone średnikami ( ; )
*
Usuwa jedno lub więcej zdefiniowanych makr
=
Definiuje (lub redefiniuje) makro
Użycie
Polecenie MACRO jest używane dla zdefiniowania nowych poleceń MACRO, które są podzbiorem
istniejących poleceń SoftICE. Zdefiniowane makra mogą być wykonywane bezpośrednio z lini
poleceń SoftICE. Polecenie MACRO jest również używane do listowani ,edycji lub usuwania
pojedynczych makr. Makra są bezpośrednio powiązane z działaniem punktu przerwania, ponieważ
działanie punktu przerwania jest prostym makrem, które nie ma nazwy i może być wykonane tylko
przez mechanizm SoftICE.
Jeśli nie ma żadnej opcji, jest wyświetlana lista wszystkich zdefiniowanych makr lub jeśli jest
określona nazwa makra, to makro będzie wprowadzone do bufora poleceń aby można było go
edytować.
Kiedy definiujemy lub redefiniujemy makro, używana jest następująca postać makro polecenia
MACRO nazwa makra = „treść makra”
Parametr nazwa makra może mieć długość pomiędzy 3 a 8 znaków i może zawierać i może zawierać
znaki alfanumeryczne i znaki podkreślenia ( _ ). Jeśli parametr nazwy makra określa istniejące makro,
polecenie MACRO redefiniuje istniejące makro. Nazwa makra nie może być zduplikowanym
istniejącym poleceniem SoftICE. Nawa makra musi być poprzedzona znakiem równości „=”, po
którym następuje stała łańcuchowa, który definiuje treść makra.
Parametr treść makra musi być osadzony pomiędzy początkowym a końcowym znakiem cudzysłowu
(„). Treść makra jest zbiorem istniejących poleceń SoftICE lub zdefiniowanych makr, oddzielonych
przez średniki. Każde polecenie może zawierać właściwy ‘literowy’ parametr lub możesz użyć formy
%<parametr#>%, gdzie parametr# musi być pomiędzy 1 a 8. Kiedy makro jest wykonywane z lini
poleceń, dowolny wzmiankowany parametr będzie rozszerzony do treści makra z określonymi
parametrami kiedy polecenie zostało wykonane. Jeśli musisz osadzić dosłowny znak („) lub znak
procentu (%) wewnątrz treści makra poprzedź znak ten znakiem backslash (\). Ponieważ znak
backslash jest używany dla sekwencji unikowej, określony literalny znak backslash używa dwóch
kolejnych backslashy (\\). Końcowe polecenie wewnątrz treści makra nie musi być zakończony
średnikiem.
Możesz zdefiniować makra w SoftICE Loaderze używając takiej samej składni opisanej tutaj. Kiedy
ładujesz SoftICE, każde zdefiniowane makro jest tworzone i dostępne do stosowania. SoftICE
wyświetla komunikat dla każdego zdefiniowanego makra pamiętając o jego obecności. Ponieważ
makra zużywają pamięć, możesz ustawić maksymalną liczbę nazwanych i nienazwanych makr (to
znaczy działań punktów przerwań), które mogą być zdefiniowane podczas sesji SoftICE. Domyślna
wartość 32 jest również wartością minimalną. Wartość maksymalna to 256
Notka: Treść makra nie może być pusta. Musi zawierać jeden lub więcej widocznych znaków. Treść
makra może wykonywać inne makra, lub definiować inne makra, lub nawet punkt przerwania z
działaniem punktu przerwania. Makro może nawet odnosić się do samego siebie, chociaż makro
rekurencyjne nie jest szczególnie użyteczne ponieważ nie ma żadnego programistycznego sposobu
zakończenia takiego makra. Makra , które używają rekurencji wykonywaną określoną ilość razy na
jaką pozwala SoftICE . (Są obsługiwane 32 poziomy rekurencji), ani mniej ani więcej. Nawet z tym
ograniczeniem, makro rekurencyjne może być użyteczne dla przejścia zagnieżdżenia lub połączonych
struktur danych. Dla uzyskanie makra rekurencyjnego do wykonania jakiego oczekujesz, musisz
mieć jasno zapisaną definicję makra.
Przykład
Poniższy przykład używa polecenia MACRO bez parametrów lub opcji
MACRO
XWHAT
=”WHAT EAX; WHAT EBX; WHAT ECX;WHAT EDX; WHAT ESI; WHAT
EDI”
OOPS
=”I3HERE OFF; GENINT 3”
1 shoot
=”bpx eip do \”bc bpindex \””
Notka: Nazwa makra jest wylistowana po lewej, a definicja treści makra po prawej.
Poniższe przykłady pokazują inne podstawowe zastosowania polecenia MACRO:
Polecenie
Opis
MACRO *
Usuwa wszystkie nazwane makra
MACRO oops *
Usuwa makra nazwane oops
MACRO xwhat
Edytuje makro nazwane xwhat
Notka: Ponieważ makro może być redefiniowane w dowolnym czasie, kiedy używasz postaci
edycyjnej polecenia MACRO (MACRO nazwa makra) definicja makra będzie umieszczona w
buforze edycyjnym aby mogło być wyedytowane. Jeśli nie życzysz sobie modyfikować makra,
naciśnij ESC. Istniejące makro pozostanie bez zmian. Jeśli modyfikujesz treść makra bez zmiany
nazwy makra, makro będzie redefiniowane (zakładając ,że składnia jest poprawna!)
Poniższy przykład jest prostą definicją makra:
MACRO help = „h”
Kolejny przykład używa parametru literowego wewnątrz treści makra. Jego przydatność jest
ograniczona do określonej sytuacji lub wartości
MACRO help = „h exp”
W poprzednim przykładzie, polecenie H SoftICE jest wykonywane z parametrem exp za każdym
razem kiedy wykonuje się makro. Powoduje to wyświetlenie się pomocy dla polecenia EXP
Tu mamy trochę bardziej użyteczną definicję tego samego makra
MACRO help = „help %1”
W poprawionym przykładzie parametr opcjonalny został zdefiniowany do przekazania do polecenia
H SoftICE. Jeśli polecenie jest wykonywane bez parametrów, argument polecenia H jest pusty, i
makro wykonuje się tak jak pierwsza definicja; wyświetlona jest pomoc dla wszystkich poleceń. Jeśli
makro wykonuje się z parametrem 1 , parametr ten jest przekazany do polecenia H i jest wyświetlona
pomoc dla polecenia określonego przez parametr 1. Przy wykonywaniu makr, wszystkie parametry są
rozpatrywane opcjonalnie, a każdy nie używany parametr jest ignorowany.
Poniżej mamy przykłady poprawnych definicji makr:
MACRO qexp = „addr explorer ; query %1’ qexp
lub
qexp 1 40000
MACRO lshot = „bpx %1 do \”bc bpindex\”” lshot eip
lub
lshot @esp
MACRO ddt = „dd thread” ddt
MACRO ddp = „dd process” ddp
MACRO thr = „thread %1 tid” thr
lub
thr -x
Poniżej mamy przykłady niepoprawnych definicji makr, z wyjaśnieniem i poprawnym przykładem
Definicja zła:
MACRO dd = „ dd dataaddr”
Poprawny przykład:
MACRO dda = „dd dataaddr”
Wyjaśnienie:
Nazwa makra jest zduplikowaną nazwą polecenia SoftICE. Polecenia
SoftICE nie mogą być redefiniowane
Definicja zła:
MACRO dd = „dd dataaddr”
Poprawny przykład:
MACRO aaa = „addr %1”
Wyjaśnienie:
Nazwa makra jest zbyt krótka. Nazwa makra musi mieć od 3 do 8 znaków
Definicja zła:
MACRO pbsz = ? hibyte(hiword(*(%1-8))) << 5
Poprawny przykład:
MACRO pbsz = „? Hibyte(hiword(*(%1-8)))<<5”
Wyjaśnienie:
Treść makra musi by otoczona znakami cudzysłowu
Definicja zła:
MACRO tag = „? * (%2-4)”
Poprawny przykład:
MACRO tag = „?*(%1-4)”
Wyjaśnienie:
Treść makra odnosi się do parametru %2 bez odniesienia do parametru %1.
Nie można się odnosić do parametru %n+1 bez posiadania odniesienia do
parametru %n
MAP32
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla mapę pamięci wszystkich 32 bitowych modułów aktualnie załadowanych do pamięci
Składnia
Dla Windows 3.1
MAP32 [-u | -s] | [nazwa modułu | uchwyt modułu]
-u
Wyświetla tylko moduły w przestrzeni użytkowej
-s
Wyświetla moduły tylko w przestrzeni systemowej
nazwa modułu
Nazwa modułu Windows
uchwyt modułu Adres bazowy obrazu modułu
Dla Windows 9x i rodziny Windows NT
MAP32 [nazwa modułu | uchwyt modułu | adres]
nazwa modułu
Nazwa modułu Windows]
uchwyt modułu
Adres bazowy obrazu modułu
adres
Dowolny adres który podlega wykonywalnemu obrazowi
Użycie
MAP32 bez parametrów listuje informację o wszystkich 32 bitowych modułach. Jeśli określisz albo
nazwę modułu lub uchwyt modułu jako parametr, tylko sekcje z tym określonym modułem są
pokazane. Dla każdego modułu, jedna linia danych jest drukowana dla każdej sekcji należącej do
modułu.
Ponieważ polecenie MAP32 pobiera dowolny adres, który podlega obrazowi wykonywalnemu, aby
łatwo zobaczyć mapę pamięci modułu który zawiera aktualny EIP wpisz:
MAP32 eip
Dla Windows 9x
Bez względu na proces / kontekst w jakim jesteś, MAP32 pokazuje taką samą listę sterowników,
ponieważ pamięć powyżej 2GB jest odwzorowywana globalnie. Jednak MAP32 pokazuje różne listy
aplikacji / DLL’i w zależności od bieżącego procesu lub kontekstu, ponieważ są zawsze prywatne dla
kontekstu adresu
Dla rodziny Windows NT
MAP32 listuje sterowniki jądra jak również aplikacje i DLL’e, jakie istnieją w bieżącym procesie.
Mogą być rozpoznane w mapie ponieważ sterowniki zawsze zajmują adresy powyżej 2 GB podczas
gdy aplikacje i DLL’e są zawsze poniżej 2GB
Dane wyjściowe Każda linia danych wyjściowych MAP32 zawiera następujące informacje:
Właściciel
Nazwa modułu
Nazwa
Nazwa sekcji z pliku wykonywalnego
Obj#
Numer sekcji z pliku wykonywalnego
Adres
Adres selektor : offset sekcji
Rozmiar
Rozmiar sekcji w bajtach
Typ
Typ i atrybut sekcji :
Typ
Atrybuty
CODE
kod
IDATA
dane zainicjalizowane
UDATA
danie nie zainicjalizowane
RO
Tylko do odczytu
RW
Odczyt/Zapis
SHARED
Obiekt jest dzielony
Przykład
Dla Windows 3.1
Poniższy przykład ilustruje próbkę danych wyjściowych MAP32 wykonanych w module Visual C
MAP32 msvcrt10
Owner
Obj. Name
Obj#
Adres
Rozmiar
Typ
MSVCRT10
.text
0001
2197:86C81000
00024A00
CODE RO
MSVCRT10
.bss
0002
219F:86CA6000
00001A00
UDATA RW
MSVCRT10
.rdata
0003
219F:86CA8000
00000200
IDATA RO
MSVCRT10
.edata
0004
219F:86CA9000
00005C00
IDATA RO
MSVCRT10
.data
0005
219F:86CAF000
00006A00
IDATA RW
MSVCRT10
.idata
0006
219F:86CB6000
00000A00
IDATA RW
MSVCRT10
.reloc
0007
219F:86BC7000
00001800
IDATA RO
MAPV86
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla mapę pamięci MS-DOS aktualnej Maszyny Wirtualnej
Składnia
MAPV86 [adres]
adres
Adres typu segment : offset
Użycie
Jeśli nie jest określony żaden parametr, wyświetlona jest cała przestrzeń adresowa bieżącej wirtualnej
maszyny V86. Informacja o tym obszarze w tej mapie gdzie leżą odpowiednie adresy może być
uzyskana przez określenie tego adresu.
Strony pamięci VM DOS mogą nie być poprawne (nie odwzorowane) kiedy wpiszesz polecenie
MAPV86 zakończone komunikatem PAGE NOT PRESENT. Często, zamiast pojawić się a potem
wrócić SoftICE prowadzi te będące odwzorowywanymi strony.
Użyteczną aplikacją polecenia MAPV86 jest uzyskiwanie adresów do których musi być powiązana
tabela symboli poleceniem SYMLOC. Programy DOS które startują przed Windows nie będą
automatycznie odwzorowanych swoich informacji symbolicznych do ich lokacji w pamięci V86.
Możesz włączyć diagnozowanie poziomu źródła dla tych globalnych programów DOS przez
wykonanie następujących kroków
*Użyj polecenia MAPV86 do pobrania adresu startowego segmentu statycznego kodu programu.
Dodaj 10h do tego adresu jeśli jest wykonywalny (.EXE)
*Użyj polecenia SYMLOC do ustawienia tabeli symboli związanej z tą wartością
Dla rodziny Windows NT
Polecenie MAPV86 jest określonym procesem określonym Musi być w procesie NTVDM ponieważ
ten proces jest tym który może zawierać okienka V86. Nie ma globalnego zastosowania MS-DOS w
rodzinie Windows NT.
Dane wyjściowe Dla Windows 3.1 i Windows 9x
Poniższe informacje sumaryczne są wyświetlane przez MAPV86
VM ID
ID maszyny wirtualnej. Vm1 jest to VM Systemu
Uchwyt VM
32 bitowy uchwyt maszyny wirtualnej
Wskaźnik CRS
32 bitowy wskaźnik do struktury rejestru klienckiego VM
Adres VM
32 bitowy adres liniowy tego VM. Jest to najwyższy adres liniowy tej
maszyny wirtualnej, który jest jednocześnie bieżącym odwzorowaniem
adresu liniowego.
Jeśli bieżący CS:IP należy do wejścia MAPV86, wtedy linia będzie podświetlona. Każda linia
MAPV86 wyświetla zawartość następującej informacji:
Start
Adres początkowy komponentu segment : offset
Length
Długość komponentu w paragrafach
Name
Nazwa właściciela komponentu
Przykład
Poniższy przykład ilustruje jak używać polecenia MAPV86 do wyświetlenia całej mapy V86 dla
bieżącej VM
MAPV86
ID=01 Handle=80441000
CRS Ptr=80013390
Linear=80C00000
Start
Length
Name
0000:0000
0040
Interrupt Vector Table
0040:0000
0030
ROM BIOS Variables
0070:0000
025D
I/O System
02CD:0000
08E6
DOS
0BB5:0012
0000
NUMEGA
0C8B:0000
00E8
SOFTICE1
0D41:0000
00B6
XMSXXXX0
10D0:0000
038F
SMARTAAR
MOD
OS
Windows 3.1
Typ
Informacja systemowa
Definicja
Wyświetla listę modułów Windows 3.1
Składnia
MOD [nazwa częściowa]
Nazwa częściowa
Prefiks nazwy modułu Windows
Użycie
Polecenie to wyświetla listę modułów Windows w oknie Poleceń. Moduł jest aplikacją Windows lub
DLL’em. Wszystkie 16 bitowe moduły zostaną wyświetlone najpierw, po nich nastąpią moduły 32
bitowe. Jeśli nazwa częściowa jest określona, tylko te moduły, które zaczynają się od tej nazwy
zostaną wyświetlone.
Dane wyjściowe Dla każdego załadowanego modułu jest wyświetlana następująca informacja:
uchwyt modułu
16 bitowy uchwyt, jaki Windows wiąże z każdym modułem. Jest
to w rzeczywistości 16 bitowy selektor rekordu bazodanowego
modułu który jest podobny w formacie do nagłówka EXE pliku
modułu.
nagłówek pe
Selektor : offset nagłówka pliku PE dla tego modułu. Notka:
Wartość wyświetlana jest w tej kolumnie tylko dla modułów 32
bitowych
nazwa modułu
Nazwa określona w pliku .DEF używająca słów kluczowych
‘NAME’ lub ‘LIBRARY’
nazwa pliku
Pełna ścieżka dostępu i nazwa pliku modułów pliku
wykonywalnego
Przykład
Poniższy przykład pokazuje skrócone dane wyjściowe z MOD wyświetlającego wszystkie moduły w
systemie :
MOD
hMod
PEHeader
Module Name
.EXE File Name
0117
KERNEL
C:\WINDOWS\SYSTEM\KRNL386.EXE
0147
SYSTEM
C:\WINDOWS\SYSTEM\SYSTEM.DRV
014F
KEYBOARD
C:\WINDOWS\SYSTEM\KEYBOARD.DRV
0167
MOUSE
C:\WINDOWS\SYSTEM\LMOUSE.DRV
01C7
DISPLAY
C:\WINDOWS\SYSTEM\VGA.DRV
01E7
SOUND
C:\WINDOWS\SYSTEM\MMSOUND.DRV
0237
COMM
C:\WINDOWS\SYSTEM\COMM.DRV
0000
2987:80756080
W32SKRNL
C:\WINDOWS\SYSTEM\win32s\w32skrnl.dll
12C7
2987:86C20080
FREECELL
C:\WIN32APP\FREECELL\FREECELL.dll
1FC7
2987:86C40080
CARDS
C:\WIN32APP\FREECELL\CARDS.dll
1FDF
2987:86C70080
w32scomb
C:\WINDOWS\SYSTEM\win32s\w32scomb.dll
MOD
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla listę modułów Windows
Składnia
MOD [-u | -s] | [nazwa częściowa *]
-u
Wyświetla tylko moduły przestrzeni użytkowej
-s
Wyświetla moduły tylko w przestrzeni systemowej
nazwa częściowa
Prefiks nazwy modułu Windows
Użycie
Polecenie to wyświetla listę modułów Windows w oknie Poleceń. Jeśli jest określona nawa
częściowa, wyświetlane są tylko te moduły, które zaczynają się tą nazwa. SoftICE wyświetla moduły
w następującym porządku:
*Moduły 16 bitowe
*Moduły 32 bitowych sterowników (tylko rodzina Windows NT)
*32 bitowe moduły aplikacji
Dla Windows 9x
Lista modułów jest globalna. Moduł jest aplikacją Windows lub DLL’em. Wszystkie moduły mają
wartość hMod
Dla rodziny Windows NT
Polecenie MOD jest określonym procesem. Wszystkie moduły będą wyświetlane jeśli są widzialne
wewnątrz bieżącego procesu. Obejmuje to wszystkie 16 bitowe moduły, wszystkie 32 bitowe moduły
i wszystkie sterowniki modułów. Oznacza to ,ze jeśli chcesz zobaczyć określone musisz przełączyć
do właściwego kontekstu adresu zanim użyjemy polecenia MOD . Możesz rozróżnić moduły
aplikacji od modułów sterowników ponieważ moduły aplikacji mają adresy bazowe poniżej 2GB
(80000000h)
Moduły 16 bitowe będą jedynymi modułami, które mają wartość hMod
Dane wyjściowe Dla każdego załadowanego modułu jest wyświetlana następującą informacja:
uchwyt modułu
16 bitowy uchwyt modułu powiązany z każdym modułem. Jest to w
rzeczywistości 16 bitowy selektor rekordu bazodanowego modułu który
jest podobny do formatu nagłówka EXE pliku modułu.
baza
Bazowy adres liniowy pliku wykonywalnego. Jest również używany jako
uchwyt modułu 32 bitowego wykonywalnego.
Notka: Wartość jest tylko wyświetlana w tej kolumnie dla modułów 32
bitowych
nagłówek pe
Selektor : offset nagłówka pliku PE dla tego modułu. Notka: Wartość w tej
kolumnie jest wyświetlana tylko dla modułów 32 bitowych
nawa modułu
Nazwa określona w pliku .DEF używająca słów kluczowych ‘NAME’ lub
‘LIBRARY’
nawa pliku
Pełna ścieżka dostępu i nazwa pliku wykonywalnego modułu
Przykład
Poniższy skrócony przykład pokazuje MOD dla procesu NTVDM WOW:
MOD
HMod Base
PEHeader
ModulName
FileName
021F
KERNEL
D:\WINNT35\SYSTEM32\KRNL386.EXE
020F
SYSTEM
D:\WINNT35\SYSTEM32\SYSTEM.DRV
01B7
KEYBOARD
D:\WINNT35\SYSTEM32\KEYBOARD.DRV
02B7
MOUSE
D:\WINNT35\SYSTEM32\MOUSE.DRV
02CF
DISPALY
D:\WINNT35\SYSTEM32\VGA.DRV
02E7
SOUND
D:\WINNT35\SYSTEM32\SOUND.DRV
0307
COMM
D:\WINNT35\SYSTEM32\COMM.DRV
031F
USER
D:\WINNT35\SYSTEM32\USER.EXE
0397
GDI
D:\WINNT35\SYSTEM32\GDI.EXE
0347
WOWEXEC
D:\WINNT35\SYSTEM32\WOWEXEC.EXE
03DF
SHELL
D:\WINNT35\SYSTEM32\SHELL.DLL
0C3F
WFWNET
D:\WINNT35\SYSTEM32\WFWNET.DRV
0BFF
MMSYSTEM
D:\WINNT35\SYSTEM32\MMSYSTEM.DLL
0BF7
TIMER
D:\WINNT35\SYSTEM32\TIMER.DRV
80100000
ntoskrnl
\WINNT35\System32\ntoskrnl.exe
80100080
80400000
hal
\WINNT35\System32\hal.dll
80400080
80010000
atapi
atapi.sys
80010080
80013000
SCSIPORT
\WINNT35\System32\Drivers\SCSIPORT.SYS
80013080
80001000
Atdisk
Atdisk.sys
80001080
8001B000
Scsidisk
Scsidisk.sys
8001B080
803AE000
Fastfat
fast fat.sys
803AE080
FB000000
Floppy
\SystemRoot\System32\Drivers\Floppy.SYS
FB000080
FB010000
Scsicdrm
\SystemRoot\System32\Drivers\Scsicsrm.SYS
FB010080
FB020000
Fs_Rec
\SystemRoot\System32\Drivers\Fa_Rec.SYS
FB020080
MSR
OS
Windows 98, Windows Me i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla lub zapisuje do rejestru specyficznego dla modelu
Składnia
MSR [[-u] [rejestr początkowy [rejestr końcowy] | [-w rejestr [hidword_val] lowdword_val]”
-u
Pokazuje nieczytelne rejestry
rejestr początkowy
Początkowy rejestr do wyświetlenia
rejestr końcowy
Rejestr końcowy do wyświetlenia
-w
Zapis do rejestru
rejestr
Identyfikator rejestru
hidword_val
Zapis do górnych 32 bitów rejestru
lowdword_val
Zapis do dolnych 32 bitów rejestru
Użycie
Polecenie MSR jest używane do wyświetlania lub zapisania rejestru specyficznego modelu. Jeśli
żadna opcja nie jest podana do polecenia MSR, SoftICE spróbuje wyświetlić wszystkie te rejestry
obejmujące Wartość, Nazwę Architektoniczną, flagi Zapis/Odczyt i Opis. Jeśli odczytujesz rejestr o
którym SoftICE nie ma wewnętrznej wiedzy, SoftICE wyświetli numer rejestru i jego 64 bitową
wartość. SoftICE ma wewnętrzną o rejestrach, które stanowią „Architektoniczną MSRS” jak
zdefiniowano w Tomie 3 dokumentacji Intela Pentium 4 System Programming Guide.
Ostrzeżenie: Nie wszystkie rejestry są dostępne na wszystkich platformach. SoftICE nie czyni
żadnych prób zapisania poprawnego MSR. Zapisanie do rejestru specyficznego modelu ma
potencjalnie wielkie niebezpieczeństwo. Bądź ostrożny z przeznaczeniem i wartością jaką zapisujesz.
Przykład
Poniższe przykłady pokazują dane wyjściowe z polecenia MSR. W pierwszym przykładzie, SoftICE
wyświetla wszystkie rejestry od 0x10 do 0x20:
MSR 0x10 0x20
Reg
Value Acc
ID
Name
Description
10
00000028:E03DB054
RW
IA32_TIME_STAMP_CTR
Time Stamp
Counter
17
00000028:E03DB054
RW
18
00000000:000000000
1B
00000000:FEE00100
RW
IA32_APIC_BASE
APIC Location
and Status
Tym razem SoftICE wyświetla nie odczytywalne rejestry. Jest to użyteczne dla znajdowania
nieudokumentowanego rejestru specyficznego modelu
MSR -u 0z10 0x17
Reg
Value
Acc ID
Name
Description
10
000002C:3B6C9262
RW
IA_32TIME_STAMP_CTR
Time Stamp
Counter
NTICE: Eror reading MSR 0x11
NTICE: Eror reading MSR 0x12
NTICE: Eror reading MSR 0x13
NTICE: Eror reading MSR 0x14
NTICE: Eror reading MSR 0x15
NTICE: Eror reading MSR 0x16
17
20410000:00000000
R
IA_32_PLATFORM_ID
Platform ID
W końcowym przykładzie, Time Stamp Counter Register jest odczytany a potem resetowany.
Notka: To działanie powoduje ,migotanie kursora dla zatrzymania funkcjonowania dopóki się nie
rozwinie.
MSR 10
Reg
Value
Acc
ID Name
Description
10
0000002D:62496928
RW
IA_32_TIME_STAMP_CTR
Time Stamp
Counter
MSR -w 10 0
MSR 10
Reg
Value
Acc
ID Name
Description
10
00000000:2E350910
RW
IA_32_TIME_STAMP_CTR
Time Stamp
NAME
OS
Rodzina Windows NT
Typ
Polecenia Symbol /Źródło
Definicja
Wiąże nazwę z adresem w pamięci
Składnia
NAME [-d][adres] [nazwa]
-d
Usuwa określoną nazwę
adres
32 bitowy adres lub selektor : adres
nazwa
Nazwa powiązana z adresem
Użycie
Polecenie NAME jest używane do wiązania nazwy z adresem. Przypisana nazwa będzie wyświetlana
przez SoftICE przy wyświetlaniu danych i okno disasemblacji i może być również rozwiązywany
przez wylicznik wyrażenia. Nazwy definiowane przez użytkownika może być używana do
ustawiania „zakładek” w kodzie lub danych. Możesz nazwać pierwszą instrukcję disasemblowanego
programu dla którego nie masz kodu źródłowego a powracamy do programu późnej używając
polecenia U (disasembluj). Podobnie, adres nazwanej danej może być wyświetlony za pomocą
dowolnego polecenia wyświetlenia danych z nazwą zdefiniowaną przez użytkownika.
Wydanie polecenia NAME bez parametrów spowoduje ,że wszystkie zdefiniowane nazwy będą
wyświetlane. Polecenie NAME z adresem lub nazwą wyświetli istniejącą nazwy pasujące do
podanego parametru. Znaki wieloznaczności są obsługiwane, więc ‘NAME my*” wyświetli
wszystkie zdefiniowane nazwy zaczynające się od znaków ‘my’
Chociaż polecenia NAME zezwala selektorom być określonymi kiedy definiujemy nazwę (zwykle w
postaci selektor : offset), selektory są ignorowane kiedy poszukujemy nazwy dopasowanej do adresu.
Innymi słowy, polecenie NAME zakłada płaski model adresu. Nazwy zdefiniowane w przestrzeni –
wszystkie adresy poniżej 80000000h na większości platform Windows – są powiązane z kontekstem
adresu, który był aktualnym kiedy nazwa była definiowana. Oznacza to ,że nazwy definiowane w
przestrzenia adresowej będą zlokalizowane dla pojedynczej aplikacji, i nie będzie wyświetlony w
innej przestrzeni adresowej, chociaż adres rzeczywisty może być taki sam.
Nazwy zdefiniowane tym poleceniem zawsze będzie używał adresów bezwzględnych. Jeśli moduł
zawierający nazwane adresy nie jest załadowany i później ładowany ponownie pod innym adresem
wszystkie zdefiniowane nazwy będą teraz wskazywały stare, i teraz niepoprawne, adresy.
Nazwy zdefiniowane przez użytkownika współ istnieje z symbolami zdefiniowanymi w dowolnym
załadowanym symbolu lub tablicy eksportów. Możesz również ustawić nazwy wewnątrz i wokół
podprogramów dla których załadowałeś nazwy symboli. Nazwy zdefiniowane przez użytkownika nie
pokazują się jeśli podgalasz kod w trybie źródłowym.
SoftICE alokuje pamięć dla polecenia name na starcie. Domyślnie, 256 nazw jest obsługiwanych
(rzeczywista liczba nazw jaką możesz ustawić jest bezie mniejsza jeśli używasz szczególnie długich
ciągów dla swoich nazw), ale liczba wejść może być również kontrolowana poprzez dodanie
NAMES = entry do pliku winice.dat . Na przykład dodanie NAMES= 400 do pliku winice.dat
spowoduje, że SoftICE zaalokuje pamięć dla 400 nazw kiedy się rozpoczyna.
Polecenie NAME jest obejmowane domyślnie przy pojawianiu się menu myszki. Aby użyć tej cechy,
po prostu kliknij prawy klawiszem myszy na adresie gdzieś w oknie SoftICE i wybierz ‘NAME’ z
pojawiającego się okna. Potem będziesz musiał zakończyć polecenie przez wpisanie nazwy w lini
poleceń.
Przykład
Tu mamy przykład ustawienia nazwy na adresie w oknie disasemblacji. Pierwsze, oryginalne okno
disasemblacji zawiera:
0008:805382E5
MOV
ESI, [EBP+08]
0008:805382E8
PUSH
EDI
0008:805382E9
JZ
805383AF
Teraz wpisz polecenie NAME:
NAME 805383AF
MysteryAddress1
Teraz zdisasemblowany fragment wygląda tak:
0008:805382E5
MOV
ESI, [EBP+08]
0008:805382E8
PUSH
EDI
0008:805382E9
JZ
MysteryAddress1
Teraz możesz wpisać
U MysteryAddress1
I SoftICE zdisasembluje ten kod poczynając od tego adresu.
Zauważ ,że ustawienie nazwy na EBP+08 w podprogramie disasemblowanym zakończy się
powodzeniem, ale niekoniecznie tworząc pożądany wynik. Jest tak ponieważ SoftICE używał by
bieżącej wartości EBP, niezależnie od tego co wydarzyło się w czasie kiedy polecenie było wydane.
Jeśli punkt wykonania był ustawiony wewnątrz podprogramu zawierającego kod, i ramkę stosu,
nazwa może również wskazywać poprawny adres. Jeśli nie, może wskazywać cokolwiek. Używaj
tego ostrożnie, kiedy przypisujesz nazwę do adresów indeksowanych rejestrami .
W końcu przypuśćmy ,że stworzyliśmy kilka nazw i teraz życzymy sobie je usunąć. Użycie
NAME -d *
usuwa wszystkie zdefiniowane nazwy. Dla bardziej selektywnego usuwania możesz wpisać
NAME –d Mystery*
może usunąć wszystkie nazwy zaczynające się ‘Mystery” pozostawiając wszystkie inne nienaruszone
NET
OS
Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Zdalne diagnozowanie przez sztandarowe połączenie ethernetowe IP
Składnia
NET START <docelowy adres IP | DHCP >[MASK= maska podsieci][GATEWAY= adres IP]
adres docelowy
Adres IP maszyny na której jest uruchomiony SoftICE
DHCP
Protokół Dynamicznej Konfiguracji Hostu. Instruuje SoftICE aby
pobrał parametry IP z twojego sieciowego DHCP
MASK = maska podsieci
Maska podsieci sieci
GATEWAY= adres ip
Adres IP baramki sieciowej
NET ALLOWA <zdalny adres IP | ANY > [AUTO] [HASŁO = hasło]
ANY
Pozwala maszynie o dowolnym adresie IP połączyć się z maszyną
Docelową.
AUTO
powtórne połączenie. Jest to użyteczne jeśli zdalna maszyna zgubi
swoje połączenie i musi łączyć się ponownie. Jeśli AUTO nie jest
określone, musisz ponownie wydać polecenie NET ALLOW na
docelowej maszynie zanim będzie dokonane inne połączenie.
HASŁO = hasło
Wrażliwe na wielkość liter hasło, które jest wymagane od
użytkowników do uzyskania dostępu do SoftICE na maszynie
docelowej
NET COMx <szybkość transmisji>
x
Numer portu COM. Poprawne wartości od 1 do 4. Plecenie to
używa tylko standardowych adresów portów
szybkość transmisji
Szybkość transmisji pomiędzy 1200 a 115200
NET PING adres IP
NET RESET
NET STOP
NET HELP
NET STATUS
Użycie
Możesz użyć polecenia NET do uruchomienia SoftICE na innej (docelowej) maszynie aby można
było zdalnie sterować zdalnie przez standardowe połączenie internetowe z innej maszyny (maszyny
zdalnej) Aby zdalnie uruchomić SoftICE musisz zmienić plik sterownik na maszynie docelowej, z
jednym z dostarczanych przez dystrybucję SoftICE.
Po instalacji karty sieciowej i sterownika możesz użyć opcji polecenia NET na maszynie docelowej
do włączenia SoftICE sterowanego z maszyny zdalnej.
Polecenie NET START włącza IP stosu w SoftICE, Polecenie to identyfikuje parametr IP dla SoftICE
(adres IP, maska podsieci i adres bramki), Jeśli sieć lokalna obsługuje DHCP możesz uzyskać , przez
SoftICE , parametr IP z sieciowego serwera DHCP. W tym miejscu, stos IP jest uruchomiony, ale
SoftICE nie zezwala na zdalne diagnozowanie dopóki używasz polecenia NET ALLOW dla
określenia jaka inna maszyna może sterować SoftICE.
Polecenie NET ALLOW mówi SoftICE jak określać, jak maszyna może być użyta do zdalnego
sterowania SoftICE. Maszyna zdalna może być określona jako specyficzny adres IP lub DOWOLNY
adres IP. Dostęp do sterowania SoftICE może być również kwalifikowany przez wrażliwe na
wielkość liter hasło.
Polecenie NET COMx pozwala ci na ustawienie sesji zdalnego diagnozowania poprzez połączenie
szeregowe, obejmujące zdolność do zdalnego sterowania myszką i oknem SoftICE.
Polecenie NET PING pozwala ci wykonać podstawowe testy sieciowe komunikacyjne przez
wysyłanie pakietu ICMP Echo Request (PING) pod adres IP. SoftICE wysyła to żądanie i wskazuje
czy uzyskał odpowiedź w ciągu 4 sekund.
Polecenie NET RESET kończy aktywną sesję zdalnego sterowania (IP lub połączenie szeregowe) i
anuluje wpływ poprzedniego polecenie NET ALLOW.
Polecenie NET STOP kończy dowolną aktywną sesję zdalnego diagnozowania (IP lub połączenie
szeregowe) i anuluje wpływ poprzedniego polecenia NET ALLOW. Wyłącza również IP stosu.
Polecenie NET HELP pokazuje listę dostępnych poleceń sieciowych wraz z ich składnią.
Polecenie NET STATUS pokazuje bieżący stan karty sieciowej. Wyświetla bieżące parametry IP
(adres IP, maska podsieci, adres bramki) oraz status połączenia zdalnego diagnozowania.
Po poprawnym ustawieniu maszyny docelowej, wydaj polecenie SIREMOTE na zdalnej maszynie do
stworzenia połączenia z maszyną docelową. Aby użyć SIREMOTE, musisz skopiować SIREMOTE
.EXE z katalogu instalacyjnego SoftICE do zdalnej maszyny. Składnia polecenie SIREMOTE:
SIREMOTE <docelowy adres IP> [hasło]
Składnia dla polecenia SIREMOTE z połączeniem szeregowym
SIREMOTE COMx [<szybkość transmisji>]
Przykład
Poniższe polecenia ustawiają SoftICE na maszynie docelowej, której adres IP to 10.0.0.5 i zezwalają
maszynie zdalnej, o adresie IP 10.0.0.10 połączyć się z maszyną docelową i sterować SoftICE
NET START
10.0.0.5
NET ALLOW
10.0.0.10
Ponieważ polecenie NET ALLOW nie zawiera opcji AUTO, zdalny użytkownik musi pozwolić raz
na połączenie.
Poniższe polecenia ustawiają SoftICE na maszynie docelowej, która pobiera adres IP z serwera
DHCP. Potem pozwala innej maszynie na połączenie jeśli użytkownik poda poprawne hasło
NET START DHCP
NET ALLOW ANY AUTO PASSWORD= NuMega
To polecenie NET ALLOW określa, ze może być użyty dowolny do połączenia z maszyną docelową
jeśli użytkownik wprowadzi właściwe hasło. Opcja AUTO mówi SoftICE aby zezwolił zdalnej
maszynie do połączenie więcej niż raz w przypadku rozłączenia
NTCALL
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla funkcje NTOSKRNL używane przez NTDLL
Składnia
NTCALL
Użycie
Polecenie NTCALL wyświetla wszystkie funkcje NTOSKRNL , które są używane przez NTDLL.
Wiele z API w NTDLL jest niczym więcej niż interfejsem obiektowym dla podprogramów w
NTOSKRNL gdzie prawdziwa praca wykonywana jest na poziomie 0. Jeśli użyjesz SoftICE do
przejścia przez jedną z tych funkcji, zobaczysz ,że wykonuje ona bezpośrednio instrukcję INT 2Eh.
Instrukcja INT 2Eh służy jako interfejs dla przejścia pomiędzy poziomem uprzywilejowania 3 API a
poziomem uprzywilejowania 0 podprogramu, który w rzeczywistości implementuje tą funkcję.
Kiedy wykonywane jest INT 2Eh, rejestr EDX jest ustawiony aby wskazywał parametr ramki stosu
dla tego API a rejestr EAX jest ustawiony jako numer indeksu tej funkcji. Kiedy bieżący wskaźnik
instrukcji odnosi się do instrukcji INT2Eh, disasembler SoftICE pokaże adres podprogramu poziomu
uprzywilejowania 0, który będzie wywołany kiedy wykona się INT 2Eh wraz z kilkoma parametrami
dword, które przekazano w ramce stosu wskazywanej przez EDX. Jeśli życzysz sobie zobaczyć
nazwę symbolu tego podprogramu, musisz załadować symbole z NTOSKRNL i upewnić się ,że jest
to aktualna tablica symboli.
Dane wyjściowePolecenie NTCALL wyświetla wszystkie dostępne API poziomu 0. Dla każdego API, są wyświetlane
następujące informacje:
Func.
Szesnastkowy numer indeksu funkcji przekazanej w EAX
Address
Adres początku tej funkcji selektor : offset
Params
Kilka parametrów dword przekazanych do funkcji
Name
Albo nazwa symboliczna funkcji albo offset wewnątrz NTOSKRNL jeśli
nie jest załadowany żaden symbol.
Poniższy przykład pokazuje dane wyjściowe disasemblera. Zauważ jak SoftICE wskazuje ,że
wykonanie funkcji INT 2Eh prowadzi do funkcji NTOSKRNL, _ NTSetEvent będzie wywołana z
dwoma parametrami
ntdll! NtSetEvent
001B:77F8918C
MOV
EAX,00000065
001B:77F89191
LEA
EDX,[ESP+04]
001B:77F89195
INT
2E
; _NtSetEvent (params = 02)
001B:77F89197
RET
0008
Przykład
Poniższy przykład pokazuje skrócone dane wyjściowe polecenia NTCALL. Można wywnioskować z
tego listingu ,że podprogram NTOSKRNL, _NTAccessCheck jest umieszczony pod 8:90182B9Eh,
który jest powiązane z identyfikatorem funkcji 1 i który pobiera 8 parametrów dword.
NTCALL
00
0008:801690D42
params = 06
_NtAcceptConnectPort
01
0008:80182B9E
params = 08
_NtAccessCheck
02
0008:80184234
params = 0B
_NtAccessCheckAndAudit
Alarm
03
0008:80180C0A
params = 06
_NtAdjustGroupsToken
04
0008:80180868
params = 06
_NtAdjustPrivilegesToken
05
0008:9017F9A6
params = 02
_NtAlertResumeThread
06
0008;8017F95E
params = 01
_NtAlertThread
07
0008:8014B0C4
params = 01
_NtAllocateLocallyUniqueId
08
0008:8014B39A
params = 03
_NtAllocateUuids
NTSTATUS
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla nagłówek zdefiniowanych mnemoników dla kodów błędu NTSTATUS
Użycie
Polecenie NTSTATUS wyświetla nagłówek zdefiniowanych mnemoników powiązanych z
określonym kodem NTSTATUS. Wiele API w systemie operacyjnym (zwłaszcza DDK) zwraca
standardowy kod błędu NTSTATUS. Polecenie to pozwala ci zwrócić bardziej intuicyjny mnemonik
powiązany z kodem błędu NTSTATUS
Przykład
Poniższy przykład pokazuje polecenie NTSTATUS zwracające mnemonik dla kodu błędu 0x5e:
NTSTATUS 0x5e
OBJECT_INITIALIZATION_FAILED
O
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Port I/O
Definicja
Wyprowadzenie wartości do portu I/O
Składnia
O [rozmiar] port wartość
rozmiar
Wartość
Opis
B
bajt
W
słowo
D
dwusłowo
port
adres portu
wartość
Wartość bajta, słowa lub dwusłowa określona przez rozmiar
Użycie
Dane wyjściowe polecenia PORT są używane do zapisania wartości do portu sprzętowego. Dane te
mogą być zrobione dla portów bajtu, słowa lub dwusłowa. Jeśli nie określono żadnego rozmiaru ,
domyślnie jest to B.
Wszystkie dane wyjściowe są wysyłane bezpośrednio do sprzętu z wyjątkiem rejestru maski przerwań
(Port 21h i A1h). Nie działa to dopóki kolejnym razem nie wyjdziesz z ekranu SoftICE
Przykład
Poniższe polecenie wykonuje wyprowadzenie do portu 21, które nie maskuje wszystkich przerwań
dla sterownika przerwań
O 21 0
OBJDIR
OS
Windows 98, Windows Me i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla obiekty w katalogu obiektów Windows 98, Me lub NT/2000 Menażerze Obiektów
Składnia
OBJDIR [nazwa katalogu obiektów]
nazwa katalogu obiektów
Nazwa obiektu jaki pojawia się w katalogu obiektów Menadżera
Obiektów
Użycie
Użyj polecenia OBJDIR do wyświetlenia nazwanych obiektów wewnątrz katalogu obiektów
Menadżera Obiektów. Zastosowanie OBJDIR bez parametrów wyświetli nazwane obiekty wewnątrz
głównego katalogu obiektów. Dla wylistowania obiektów w podkatalogu, wpisz pełną ścieżkę
dostępu katalogu obiektów.
Dane wyjściowe Poniższe informacje zostaną wyświetlone przez polecenie OBJDIR:
Object
Adres ciała obiektu
ObjHdr
Adres nagłówka obiektu
Name
nazwę obiektu
Typ
zdefiniowany przez Windows typ danych obiektu
Przykład
Poniższy przykład to skrócone dane wyjściowe OBJDIR listujące obiekty w katalogu obiektów
Device
OBJDIR device
Directory of
\Device at FD8E7F30
Object
ObjHdr
Name
Type
FD8CC750
FD8CC728
Beep
Device
FD89A030
FD89A008
NwlnkIpx
Device
FD889150
FD889128
Netbios
Device
FD8979F0
FD8979C8
Ip
Device
FD8C9ED0
FD8C9EA8
KeyboardClass0 Device
FD8C5038
FD8C5010
Video0
Device
FD8C4040
FD8C4018
Video1
Device
W poniższym przykładzie , polecenie OBJDIR jest użyte z określoną ścieżką dostępu katalogu
obiektów do wylistowania obiektów w podkatalogu \Device\Harddisk0
OBJDIR \device\harddisk0
Directory of
\Device\Harddisk0 at FD8D38D0
Object
ObjDir
Name
Type
FD8D3730
FD8D3708
Partition0
Device
FD8D3410
FD8D33E8
Partition1
Device
FD8D32D0
FD8D32A8
Partition2
Device
Zobacz
OBJTAB
OBJTAB
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla wejścia tablicy uchwytów obiektów użytkownika WIN32
Składnia
OBJTAB [uchwyt | nazwa typu obiektu | -h]
uchwyt
Uchwyt obiektu
nazwa typu obiektu
Jedna z nazw typu obiektu predefiniowana przez SoftICE:
FREE
Uchwyt wolny
HWND
Hwnd
Menu
Menu lub pod menu obiektu
Icon (lub Crsr)
HICON lub HCURSOR
DFRW
Dana DeferWindowPos
HOOK
Hook
TINF
Dana infa wątku
QUE(tylko 3.51)
Kolejka komunikatu
CPD
Thunk Call Proc Data
ACCL
Tablica akceleratora
WSTN
Obiekt stacji roboczej
DESK(tylko 3.51)
Obiekt pulpitu
DDE
Ciąg DDE
-h
Wyświetla listę poprawnych nazw typów obiektów
Użycie
Użyj polecenia OBJTAB do wyświetlenia wszystkich wejść w głównej tablicy uchwytów obiektów
stworzonej i kontrolowanej przez CSRSS lub uzyskania informacji o określonym obiekcie lub
obiektach pewnego typu. Główna tablica uchwytów obiektów zawiera informację dla przetłumaczenia
uchwytów obiektów użytkownika takich jak hWnd lub hCursor na typ rzeczywisty, który przedstawia
ten obiekt. Jeśli użyjesz OBJTAB bez parametrów, SoftICE wylistuje pełną zawartość głównej
tablicy uchwytów obiektów. Jeśli uchwyt obiektu jest określony, właśnie ten obiekt jest wylistowany.
Jeśli wpisana jest nazwa typu obiektu, listowane są wszystkie obiekty w głównej tablicy obiektów
tego typu.
Dane wyjściowe Poniższe informacje są wyświetlane przez polecenie OBJTAB
Object
Wskaźnik do danej obiektu
Typ
Typ obiektu
Id
Id typu obiektu
Handle
Wartość uchwytu Win32 dla tego obiektu
Owner
CSRSS określa instancję danych dla tego procesu lub wątku, którego
właścicielem jest obiekt.
Flags
Flagi obiektu
Przykład
Poniżej jest skrócony przykład użycia polecenia OBJTAB bez parametrów lub opcji
OBJTAB
Object
Type
Id
Handle
Owner
Flags
7F2D4DA0
Hwnd
01
0004005C
7F2D5F88
00
7F2D85B8
Menu
02
0001005D
00298B40
00
7F2D4E58
Hwnd
01
0003005E
7F2D5F88
00
7F2D1820
Queue
07
0002005F
00000000
00
003E50E0
Accel. Table
09
00030060
00298B40
00
Zobacz
OBJDIR
OPINFO
OS
Rodzina Windows NT
Typ
Różne
Definicja
Wyświetla informacje o instrukcjach języka assemblera
Składnia
OPINFO instrukcja asm
instrukcja asm
Instrukcja języka assemblera
Użycie
Polecenie OPINFO wyświetla krótki opis instrukcji języka assemblera Dla instrukcji ogólnego
zastosowania polecenie to będzie również wyświetlało listę flag na które wpływają w rejestrze
EFLAGS. OPINFO obsługuje wszystkie instrukcje x86, wliczając w to SSE,SSE2 i instrukcje AMD
3Dnow! Nie są obsługiwane instrukcje zmienno przecinkowe x87.
Lista dotkniętych EFLAGS jest pokazana jako tablica z wejściem dla każdej flagi w niższych 16
bitach EFLAGS, Możliwe wartości dla każdej z flag to:
Wartość Znaczenie
T
Instrukcja testująca flagę
M.
Instrukcja modyfikująca flagę
O
Instrukcja repetująca flagę
1
Instrukcja ustawiająca flagę
-
Instrukcja wpływająca na flagę nie zdefiniowaną
R
Instrukcja przywracająca poprzednia wartość flagi
Blank
Instrukcja nie wpływająca na flagę
Przykład
Poniższy przykład pokazuje polecenie OPINFO użyte do wyświetlenia informacji o instrukcji języka
assemblera ADC
OPINFO adc
ADC
Integer addition: DEST
← DEST + SRC
EFLAGS | OF DF IF SF ZF AF PF CF TF NT RF |
| M. M. M. M. M. TM |
P
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterownie przepływem
Klawisz
F10(P RET: F12)
Definicja
Wykonanie jednego kroku programu
Składnia
P [RET]
RET
Powrót. Kroczy dopóki zwraca lub wraca z instrukcji przerwania
Użycie
Polecenie P wykonuje logiczny krok programu. W trybie asemblacji , wykonywana jest jedna
instrukcja spod bieżącego CS:EIP chyba ,że instrukcja jest wywołanie, przerwanie, pętla lub
powtarzany ciąg instrukcji. W tych przypadkach, cały podprogram lub iteracja jest skończona zanim
sterowanie jest zwrócone do SoftICE. Jeśli jest określone RET, SoftICE będzie kroczył dopóki nie
znajdzie powrotu lub powrotu z instrukcji przerwania .Funkcja ta działa albo 16- albo 32- bitowym
kodem jak również działa na poziomie 0 kodu.
Polecenie P używa flagi pojedynczego kroku dla większości instrukcji. Dla wywołań, przerwań, pętli
lub powtarzanych ciągów instrukcji, polecenie P używa jednorazowej instrukcji INT3 punktu
przerwania wywołania.
W trybie źródła wykonywana jest jedna instrukcja źródłowa >jeśli instrukcja źródłowa zawiera w
sobie wywołanie innej procedury, wywołanie nie następuje. Wywołana procedura jest traktowana jak
pojedyncza instrukcja. Jeśli okno Rejestrów jest widoczne kiedy pojawia się SoftICE, wszystkie
rejestry które są zmienione ponieważ polecenie P wyświetla z atrybutem pogrubienia video. Dla
instrukcji wywołania, rejestry są podświetlone pokazując jakie rejestry podprogramu nie są
zabezpieczone.
W niezwykle długiej procedurze, może być godne uwagi opóźnienie kiedy używamy plecenie P
RET, ponieważ SoftICE pracuje dla każdej instrukcji w pojedynczym kroku.
Dla Windows 9x i rodziny Windows NT
Polecenie P, domyślnie, jest określonym wątkiem. Jeśli aktualny EIP jest wykonywany w wątku X,
SoftICE nie przerwie dopóki krok programu wystąpi w wątku X. Dla platformy rodziny Windows NT
zapobiega przypadkowi przełączania procesu lub wątku podczas kroku programu powodując
wykonanie do zatrzymania w różnych procesach lub wątkach jakie debuggujesz. Dla zmiany tego
zachowania albo użyj polecenia SET ze słowem kluczowym THRAEDP albo zablokuj kroczenie
określonego wątku w ciągu inicjalizacyjnym rozwiązywania SoftICE.
Przykład
Poniższy przykład wykonuje jeden krok programu
P
PACKET
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla zawartość pakietu sieciowego
Składnia
PACKET [adres]
PACKET [adres] [długość]
PACKET ETHERNET | TOKEN – RING | ARCNET | FDDI
PACKET LINIA | SZCZEGÓŁ | STRUKTURA
PACKET RAW | STANDARD
PACKET ZATWIERDZONE | NIE ZATWIERDZONE
PACKET POMOC
adres
Adres pakietu sieciowego
długość
Długość pakietu sieciowego
ETHERNET/TOKEN – RING/ARCNET /FDII określony typ pakietu
LINIA/SZCZEGÓŁ/STRUKTURA
LINIA wyświetla jedną linię na pakiet; SZCZEGÓŁ wyświetla informację
Szczegółową na pakiet; STRUKTURA tworzy zrzut elementu
strukturalnego
RAW/STANDARD
RAW wyświetla dane szesnastkowo; STANDARD wyświetla dane
formatowane / interpretowane
ZATWIERDZONE/ NIEZATWIERDZONE
ZATWIERDZONE włącza „zdrowe sprawdzanie”;
NIEZATWIERDZONE wyłącza „zdrowe sprawdzanie”
Użycie
Użyj polecenia PACKET do wyświetlenia zawartość pakietu sieciowego
Dane wyjściowe Dane wyjściowe polecenia PACKET różnią się w zależności od wybranych opcji. Zobacz poniższy
przykład.
Przykład
Poniższy przykład pokazuje dane wyjściowe polecenia PACKET
PACKET 853df6e8
Ethernet;
DIX:
Destination: 00A0C98AB20A
Size: 003C
Source: 00B0D02CEE87 Type: 0800
IP:
IP version: 4 IP header length; 5 (32- bit WORDs)
Tyoe of service; 00
Precedence = Routine
Delay = Normal
Throughpout = Normal
Relaibilty = Normal
Packet length : 003C Packet ID; 9BF5
More fragmnets; NO Fragment offset : 0000
Time – to –live; 128 Protocol; ICMP(1) Header checksum; 9CC9
(GOOD)
Source host id : 172.23.100.153
Destination host id: 192.80.49.1
ICMP:
Type = Echo (8)
Code = 0
Checksum = 5C0E
Identifier = 512
Sequence Number = 15616
ICMP Data:
======================== Start of
Text=======================
abcdefghijklmnopqrstuvwabcdefghi
====================== End of Text
===================
PAGE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informacje tablicy stron
Składnia
PAGE [adres [ L długość]]
adres
Adres wirtualny, adres segment: offset, lub adres selektor: offset o jakim chcesz
znać informację tablicy stron. Dane wyjściowe obejmują adres wirtualny i fizyczny
długość
Liczba stron do wyświetlenia
Użycie
Polecenie PAGE może być użyte do wylistowania zawartości aktualnego katalogu stron lub
zawartości pojedynczego wejścia tablicy stron.
Notka: Wiele katalogów stron jest używanych tylko przez rodzinę Windows NT
W architekturze x86, katalog stron zawiera 1024 4 bajtowych wejść, gdzie wejście określa
lokalizację i atrybuty tablicy stron, to znaczy używa do odwzorowania zakresu pamięci powiązanego
z pozycją wejścia w katalogu. (Zakresy te są pokazane daleko na prawo w katalogu stron danych
wyjściowych polecenia PAGE)
Każde wejście przedstawia lokalizację i atrybut określonej strony wewnątrz odwzorowywanego
zakresu pamięci przez tablicę stron. Strony procesora x86 są rozmiaru 4KB, więc tablica stron
odwzorowują 4MB pamięci (4Kb/ stronę * 1024 wejść)
NT używa tych 4MB strony procesorów Intel Pentium. NTOSKRNL, HAL i wszystkie sterowniki
rozruchowe są odwzorowywane do strony 4MB poczynając od 2GB (80000000h).
Notka: W powyższym paragrafie zakładamy, że przestrzeń użytkowa to 2GB. To może nie być ten
przypadek; w niektórych wersjach NT Advanced Server i niektórych Windows 2000/ Windows XP
przestrzeń użytkowa może mieć 3GB.
Kiedy określisz parametr adres, pokazana jest informacja o wejściu tablicy stron, które odwzorowuje
ten adres. Obejmuje to co następuje:
*Liniowy adres wirtualny początku odwzorowywanej strony przez wejście
*Adres fizyczny, który odpowiada początkowi odwzorowywanej strony przez wejście
*Atrybuty wejścia tablicy strony strony. Ta informacja odpowiada bezpośrednio atrybutom
definiowanym przez procesor. Atrybuty tablicy strony są przedstawiane przez bity, które wskazują
czy lub nie to wejście jest poprawne, czy strona jest niekompletna lub dostępna, czy jest zarządcą lub
stroną trybu użytkownika i czy dostęp jest chroniony. Tylko atrybuty bitu, które są ustawione są
pokazane przez SoftICE.
*Typ strony. Ta informacja jest interpretowana dla pola bitu zdefiniowanego w wejściu tablicy strony
a te typy są wyświetlane przez SoftICE odpowiadając definicji Windows.
Użycie długiego parametru z parametrem adresu listuje informacje o zakresie kolejnych wejść tablicy
strony. Powinno być odnotowane ,że polecenie PAGE nie przekroczy granicy kiedy listuje zakres.
Oznacza to ,że jeśli są listowane mniejsze wejścia niż określiłeś, musisz użyć drugiego polecenia
PAGE do wylistowania stron zaczynających się tam gdzie zatrzymał się pierwszy listing.
Jeśli nie został określony żaden parametr, polecenie PAGE pokazuje zawartość bieżącego katalogu
stron. Każda wylistowana linia przedstawia 4MB liniowej przestrzeni adresowej. Pierwsza linia
pokazuje adres fizyczny i liniowy katalogu strony. Każda kolejna linia wyświetla te informacje w
każdym wejściu katalogu strony. Dana ta pokazana dla każdego wejścia jest taka sama jak opisano
powyżej dla wejścia pojedynczej tablicy strony, jednak, w tych danych wyjściach adresy
przedstawiają lokację tablic stron zamiast stron.
Dane wyjściowe Poniższe informacje są wyświetlane przez polecenie PAGE:
adres fizyczny
Jeśli katalog strony będzie wyświetlany, wtedy jest to adres fizyczny
tablicy strony do którego odnosi się wejście katalogu strony. Każde wejście
katalogu strony odwołuje się do jednej tablicy strony która steruje 4MB
pamięci. Jeśli jest wpisany parametr adres aby określić wyświetlane strony
wtedy jest to adres fizyczny, który odpowiada stronie startowej.
adres liniowy
Tylko dla Windows 3.1 i Windows 9x: Jeśli katalog strony będzie
wyświetlony wtedy jest to adres wirtualny tablicy strony .jest to adres jeśli
chciałbyś użyć w SoftICE do wyświetlenia tablicy strony polecenia D
Jeśli określone strony będą wyświetlane, jest to adres wirtualny strony
.Jeśli wpisano długość, wtedy jest to adres wirtualny startu każdej strony.
atrybut
Jest to atrybut katalogu strony lub wejścia tablicy strony. Pokazano poniżej
poprawne atrybuty
Windows3.1, Windows 9x
Tylko rodzina Windows NT
i rodzina Windows NT
P
Obecny
S
Zarządca
D
Nieczysty
RW
Odczyt/Zapis
A
Dostępny
4M
Strona 4MB
U
Użytkownik
R
Tylko do odczytu
NP.
Nie obecny
typ
Tylko dla Windows 3.1 i Windows 9x: Każde wejście katalogu strony ma
trzybitowe pole, które może być użyte przez system operacyjny do
sklasyfikowania tablic strony .Windows klasyfikuje tablice stron w sześć
kategorii:
Systemowa
Prywatna
Instancja
Relokowalna
VM
Hookowana
Jeśli strona jest oznaczona jako Nie Obecna, wtedy wszystko co jest wyświetlane to „NP.” po którym
następuje zawartość dword wejścia tablicy strony.
Przykład
Dla Windows 3.1 i Windows 9x
Użyjemy polecenia PAGE bez żadnych parametrów wyświetlając informację katalogu strony.
Poniżej pokazano dane wyjściowe tego polecenia PAGE
PAGE
Page Directory Physical = 002B6000
Linear = 006B600
Physical
Linear
Attributes
Type
Linear Address Range
002B7000
006B7000
P
A
U
System 00000000-003FFFFF
00109000
00509000
P
A
U
System 00400000-007FFFFF
0010A000
0050A000
P
U
System 00800000-00BFFFFF
0010B000
0050B000
P
U
System 00C00000-00FFFFFF
0010C000
0050C000
P
U
System 01000000-013FFFFF
002B8000
006B8000
P
A
U
System 80000000-803FFFFF
00106000
00506000
P
A
U
System 80400000-807FFFFF
00107000
00507000
P
U
System 80800000-80BFFFFF
00108000
00508000
P
U
System 80C00000-80FFFFFF
002B7000
006B7000
P
A
U
System 81000000-813FFFFFF
Użyjemy polecenia PAGE z parametrem adresu dla wyświetlenia wejścia tablicy strony, które
odpowiada adresowi jaki określiliśmy. W poniższym przykładzie te wejścia tablicy strony są
pokazane poczynając od wejścia tablicy strony które odpowiada adresowi 00106018. Odnotujmy, że
kiedy określony jest parametr długość, adres liniowy jest obcięty do adresu bazowego strony pamięci
, która zawiera określony adres
PAGE 00106018 l 3
Linear
Physical
Attributes
Type
00106000
00006000
P
U
VM
00107000
00007000
P
U
VM
00108000
00008000
P
U
VM
Poniższy przykład pokazuje jak polecenie PAGE może być użyte do znajdowani zarówno adresu
selektor : offset adresu wirtualnego i fizycznego
PAGE #585: 263C
Linear
Physical
Attributes
Type
0004A89C
00218442
P
U
Instance
Dla rodziny Windows NT
Kiedy polecenie PAGE wyświetla informację o PTE lub PDE dla NT, 4MB strony są wskazywane
przez mnemonik „4M” w kolumnie Atrributes. Poniższa próbka danych wyjściowych pokazuje
region startowy przy 2GB
PAGE
Page Directory
Phusical=0003000
Physical
Attributes
Linear Adress Range
00000000
P
A S RW 4M.
80000000-803FFFFF
00400000
P
A S RW 4M.
80400000-807FFFFF
00800000
P
A S RW 4M
80800000-80BFFFFF
00C00000
P
A S RW 4M
80C00000-80FFFFFF
01034000
P
A S RW 4M
81000000-813FFFFF
Poniższy przykład pokazuje jak użyć polecenia PAGE do wyświetlenia atrybutów i adresów strony z
instrukcji w jakiej są aktualnie wykonywane
PAGE eip
Linear
Physical
Attributes
80404292
00404292
P D A S RW
PAGEIN
OS
Windows 9x i rodzina Windows NT
Typ
Kategoria
Definicja
Wymusza stronicowanie pamięci będącej ładowaną do pamięci fizycznej
Ostrzeżenie: PAGEIN może być niebezpiecznym poleceniem i zalecane jest tylko do ekspertów OS.
Jeśli aktualnie wykonywany wątek nie jest w kontekście w którym może dotknąć pamięci
stronicowanej, wydawanie polecenia PAGEIN może zawiesić system. Musisz upewnić się że znasz
stan swojej aplikacji i wpływ tego polecenia przed próbą jego zastosowania.
Składnia
PAGEIN adres
adres
Adres liniowy stron będącej ładowana
Użycie
W niektórych przypadkach polecenia SoftICE nie mogą odzyskać danych jakich żądasz ponieważ
bieżąca pamięć fizyczna, która wraca do określonego adresu liniowego została zestronicowana przez
system operacyjny i nie jest obecna w pamięci. Możesz użyć polecenia PAGEIN do wymuszenia aby
stronę przeciągnięto z pamięci dyskowej do pamięci fizycznej.
Przykład
Poniższy przykład pokazuje zastosowanie polecenia PAGE do załadowania strony do pamięci
fizycznej
PAGEIN 401000
Zobacz
PAGE
PAUSE
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Przerwa po każdym ekranie
Składnia
PAUSE [on | off]
Użycie
Polecenie PAUSE steruje przerwą ekranową na końcu każdej strony. Jeśli PAUSE jest włączona,
jesteś proszony o naciśnięcie dowolnego klawisza zanim informacja przewinie się do okna Poleceń.
Klawisz Enter przewija pojedyncze linie w jednym czasie. Inny dowolny klawisz przewija stronę/
Znak zachęty wyświetla się w lini stanu na dole okna Poleceń.
Jeśli PAUSE jest wyłączona, informacja automatycznie przewija się na koniec danych wyjściowych
polecenia. Jeśli nie określisz parametru wyświetli się bieżący stan PAUSE. Domyślnie PAUSE jest
włączony.
Przykład
poniższe polecenie określa ,że później wyświetlane okno Poleceń nie będzie automatycznie
przewijało ekranu. Jesteś proszony o naciśnięcie klawisza zanim informacja przewinie ekran
PAUSE on
Zobacz
SET
PCI
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Zrzut rejestrów konfiguracyjnych dla każdego urządzenia PCI w systemie
Składnia
PCI [-zwięzła | [-surowa] [rozszerzona] [-b] | -w | -d]] [szyna sterownik funkcja]
-zwięzła
Zrzut zwięzłej informacji , która obejmuje szynę, sterownik i informację
funkcji jak również sterownik i ID sprzedawcy
-surowa
Zrzut pierwszych 0x40 bajtów dla każdej przestrzeni funkcji PCI
-rozszerzona
Zrzut wszystkich 256 bajtów każdej przestrzeni funkcji PCI
-b/-w/-d
Informacja jest zrzucana w formacie bajta | słowa | podwójnego słowa
szyna
Numer szyny
sterownik
Numer sterownika
funkcja
Numer funkcji
Użycie
Polecenie PCI zrzuca rejestry dla każdego urządzenia PCI w systemie. Nie używaj tego polecenia w
systemach bez PCI. Wiele wejść jest oczywistych ale kilka nie. Zajrzyj do specyfikacji PCI po więcej
informacji o tych danych wyjściowych
Przykład
Poniższe przykłady ilustrują część danych wyjściowych dla polecenia PCI
PCI -zwarte
00/00/00
8086 – 7124
INTEL CORP
00/01/00
8086 – 7125
INTEL CORP
00/1E/00
8086 – 2418
INTEL CORP
00/1F/00
8086- 2410
INTEL CORP
00/1F/01
8086- 2411
INTEL CORP
00/1F/02
8086 – 2412
INTEL CORP
00/1F/03
8086 – 2413
INTEL CORP
01/07/00
1274 – 1371
ENSONIQ AudioPCI
01/0C/00
10B7 – 9200
3COM CORP 3Com EtherLink 10/100 PCI NIC 3C905C – TX)
PCI -rozszerzony 0 1f 0
Bus 00 Device 1F Function 00
Vendor: 8086 INTEL CORP
Device: 2410
Revision: 02
Device class: 06 Bridge device
Device subclass: 01 ISA bridge
Device sub-subclass: 00
Interrupt line: 00 Interrupt pin: 00 Min_Gnt: 00 MaxLAt: 00
Cache line size: 00 Latency timer: 00 Header type; 80 BIST: 00
I/O: 1 mem1: BusMast: 1 Special; 1 MemInv : 0
Parity: 0 Wait:0 SERR:0 Back2Back: 0 Snoop: 0
40:
00000801
00000010
00000000
00000000
50:
00000000
00000000
00000881
00000010
60:
09098A09
00000090
00000000
00000000
90:
0000FCFF
00000000
00000000
00000000
A0:
00000220
00000000
00000000
00000000
C0:
00000000
00000804
00000000
00000001
D0:
00002006
00000F02
00000000
00000000
E0:
C0000010
140F0C01
00112233
00000771
F0:
00600000
00000000
00000F3A
00000000
PEEK
OS
Windows 9x i rodzina Windows NT
Typ
Wyświetlanie / Zmiana pamięci
Definicja
Odczyt z pamięci fizycznej
Składnia
PEEK [rozmiar] adres
rozmiar
B (bajt), W (słowo), D (dwusłowo). Rozmiar domyślny to B
adres
Adres pamięci fizycznej
Użycie
PEEK wyświetla bajt, słowo lub podwójne słowo spod danej lokacji pamięci fizycznej. PEEK jest
użyteczne przy odczycie z rejestrów pamięci odwzorowanej I/O.
Przykład
Poniższy przykład wyświetla dwusłowo spod adresu fizycznego FF000000
PEEKD FF000000
Zobacz
PAGE; PHYS; POKE
PHYS
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla wszystkie adresy wirtualne, które odpowiadają adresowi fizycznemu
Składnia
PHYS adres fizyczny
adres fizyczny
Adres pamięci, jaki generuje x86 po tym jak adres wirtualny
przetłumaczono poprzez jego jednostkę stronicowania. Jest to adres jaki
pojawia się na szynie komputera, i jest ważny kiedy działamy ze
sterownikami sprzętowymi odwzorowanymi w pamięci takimi jak pamięć
video.
Użycie
Windows używając adresowania wirtualnego x86 obsługuje zdefiniowane związki pomiędzy
adresami wirtualnymi używanymi przez wszystkie systemy i kod użytkownika a adresami
fizycznymi, które są używane przez sprzęt bazowy .W wielu przypadkach zakres adresu fizycznego
może pojawić się w więcej niż jednym wejściu tablicy stron i dlatego też jest więcej niż jeden zakres
adresu wirtualnego.
SoftICE nie akceptuje adresu fizycznego w wyrażeniach. Dla obejrzenia zawartości pamięci fizycznej
musisz użyć polecenia PHYS dla uzyskania adresów liniowych, jaki może być użyty w wyrażeniach
Dla Windows 9x i rodziny Windows NT
Polecenie PHYS jest określone dla bieżącego kontekstu adresu. Przeszukuje Tablicę Stron i Katalog
Stron powiązane z bieżącym kontekstem adresu SoftICE
Przykład
Adres fizyczny A0000h jest początkiem pamięci video VGA. Pamięć video często pokazuje się w
wielokrotnym adresie wirtualnym w Windows.. Poniższy przykład pokazuje trzy różne adresy
wirtualne , które odpowiadają fizycznemu A0000
PHYS a0000
000A0000
004A0000
80CA0000
POKE
OS
Windows 9x i rodzina Windows NT
Typ
Wyświetlenie/Zmiana pamięci
Definicja
Zapis do pamięci fizycznej
Składnia
POKE [rozmiar] adres wartość
rozmiar
B(bajt), W(słowo), D(dwusłowo). Rozmiar domyślny to B
adres
Adres pamięci fizycznej
wartość
Wartość do zapisu do pamięci
Użycie
POKE zapisuje wartość bajta, słowa lub dwusłowa do danej lokacji pamięci fizycznej . POKE jest
użyteczne dla zapisania do rejestrów I/O odwzorowanych w pamięci.
Przykład
Poniższy przykład zapisuje wartość dwusłowa 0x12345678 do adresu fizycznego FF000000
POKED FF000000
12345678
Zobacz
PAGE;PEEK;PHYS
PRINT SCREEN KEY
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Drukuje zawartość ekranu
Składnia
klawisz PRINT SCREEN
Użycie
Naciśnij PRINT SCREEN aby zrzucić wszystkie informacje z ekranu SoftICE na drukarkę.
Domyślnie, port drukarki to LPT1. Użyj polecenia PRN do zmiany portu swojej drukarki. Ponieważ
SoftICE uzyskuje dostęp do sprzętu bezpośrednio do wszystkich swoich I/O, Print Screen działa tylko
na drukarkach połączonych bezpośrednio do portu COM lub LPT. Nie działa na drukarkach
sieciowych.
Jeśli nie chcesz zrzucić informacji bezpośredniego do drukarki, musisz zapisać bufor historii SoftICE
do pliku. W Symbol Loader’ze SoftICE wybierz Save SoftICE History As... z menu File.
Dla Windows 9x i rodziny Windows NT
Z VM DOS użyj narzędzia DLOG.EXE do logowania informacji okna Poleceń SoftICE.
Zobacz
PRN
PRN
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Ustawia port wyjściowy drukarki
Składnia
PRN [lptx | comx]
x
Liczba dziesiętna pomiędzy 1 a 2 dla LPT, lub 1 a 4 dla COM
Użycie
Polecenie PRN pozwala ci wysłać dane wyjściowe z Print Screen dla różnych portów drukarek. Jeśli
żadne parametr nie został określony, PRN wyświetla aktualny powiązany port drukarki
Przykład
Poniższe polecenie powoduje wydruk ekranu do portu COM1
PRN com1
PROC
OS
Windows 9x i rodzina Windows NT
Typ
System informacyjny
Definicji
Wyświetla sumaryczną informację o dowolnym lub wszystkich procesach w systemie
Składnia
Dla Windows 9x
PROC [-xo][zadania]
Dla rodziny Windows NT
PROC [[-xom] typ procesu | typ wątku]
-x
Wyświetla rozszerzoną informację dla każdego wątku
-o
Wyświetla listę obiektów w tablicy uchwytów procesów
-m.
Wyświetla informację o użyciu procesu pamięci
zadanie
Nazwa zadania
typ procesu
Uchwyt procesu, ID procesu lub nazwa procesu
typ wątku
Uchwyt wątku lub ID wątku
Użycie
Jeśli użyjesz polecenia PROC bez żadnych opcji, przedstawiona jest informacja sumaryczna dla tego
procesu jaki określiłeś, lub jeśli żaden nie jest określony, dla wszystkich procesów w tym systemie.
Informacja pamięci jest dostarczana dla wygody, ponieważ ilość wyświetlanej rozszerzonej
informacji jest całkiem duża.
Dla wszystkich procesów i wątków czasowych, jak również procesy informacji pamięci. SoftICE
używa wartości surowe z wnętrza struktur danych OS bez wykonywania obliczeń do konwersji ich
do jednostek zestandaryzowanych. Opcja obiektu (-o) wyświetla wskaźnik obiektu, uchwyt obiektu i
typ obiektu dla każdego obiektu tablicy uchwytów obiektu procesów. Ponieważ informacja
obiektowa jest alokowana ze stronicowanej puli systemu, nazwa typu obiektu nie będzie dostępna
jeśli strona nie jest obecna. W tym przypadku są wyświetlane znaki zapytania (???)
Dane wyjściowe Dla Windows 9x
Dla każdego procesu mamy poniższą informację sumaryczną
Process
Nazwa zadania
pProcess Wskaźnik do procesu bazodanowego (pdb)
Process ID
ID Ring 3 procesu
Thraeds
Ilość wątków własnych procesu
Context
Kontekst adresu
DefHeap
Domyślna sterta
DebuggeeCB
Blok kontekstowy diagnozy
Dla rodziny Windows NT
Process
Nazwa procesu
KPEB
Adres Bloku środowiska procesu jądra
PID
ID procesu
Threads
Ilość wątków własnych procesu
Priority
Bazowy priorytet procesu
User Time
Relatywna ilość czasu jaką proces spędza wykonując kod na poziomie
użytkownika.
Krnl Time
Relatywna ilość czasu jaką spędza proces wykonując kod na poziomie
jądra.
Status
Bieżący status procesu:
*Uruchomiony: proces jest aktualnie uruchomiony
*Gotowy; proces jest w stanie gotowości do uruchomienia
*Bezczynny: proces jest nieaktywny
*Wymiana: proces jest nie aktywny, a jego przestrzeń adresowa jest
usunięta
*Przejście: Proces jest aktualnie między stanami
*Zakończenie: Proces jest zakończony
Przykład
Dla Windows 9x
Poniższy przykład listuje wszystkie procesy w systemie
PROC
Process
pProcess
ProcessID
Threads
Context
DefHEap
DebuggeeCB
Winword
8156ACA8
FFFC8817
00000001
C10474D
00400000
00000000
Gdidemo
81569F04
FFFCBBBB
00000001
C1033E38
00410000
00000000
Loader32
8156630C
FFFC47B3
00000001
C10476D0
00470000
00000000
Explorer
815614C0
FFFC307F
00000002
C104577C
00440000
00000000
Mprexe
8155DFA4
FFFFFB1B
00000002
C1043340
00510000
00000000
MSGSRV32
8155D018
FFFFF4A7
00000001
C1041E28
00400000
00000000
KERNEL32
8165A31C
FFFCF87A3
00000004
C10D9EDC
00640000
00000000
Poniższy przykład pokazuje rozszerzoną informacją dla GDIDEMO
PROC -x gdidemo
Process Inforamtion for Gdidemo at 81569F04
Type:
00000005
RefCount:
00000002
Unknown1:
00000000
pEvent:
81569FC8
TermStatus:
00000103
Unknown2:
00000000
DefaultHeap:
00410000
MemContext:
C1033E38
Flags:
00000000
pPSP:
0001A1A0
PSPSelektor:
26E7
MTEIndex:
0019
Threads:
0001
ThrBotTerm:
0001
Unknown3:
00000000
R0threads:
0001
HeapHandle:
8155B000
K16TDB:
2816
MMFViews:
00000000
pEDB:
8156A448
pHAndleTable: 8156A2C0
:
ParentPDB:
8156630C
MODREFlist:
8156ABB0
Threadlist:
81569FE8
DebuggeeCB:
00000000
LHFreeHand:
00000000
InitialR0ID:
00000000
&crtLoadLock
81569F64
pConsole:
00000000
Unknown4:
C007757C
:
ProcDWORD0: 00003734
ProcGroup:
8156630C
ParentMODREF:8156ABB0
:
TopExFilter:
00000000
PriorityBase:
00000008
Heapownlist:
00650000
:
HhandleBlks:
00510000
Unknown5:
00000000
pConProvider:
00000000
:
wEnvSel:
19B7
wErrorMode:
0000
pEvtLdFinish
8156A2A0
UTState:
0000
Środowisko bazodanowe
Environment:
00520020
Unknown1:
00000000
CommandLine: 8156A500
C:\PROJECTS\GDIDEMO\Ggdidemo.exe
CurrentDir:
8156A524
C:\PROJECTS\GDIDEMO
StatupInfo:
8156A53C
hStdIn:
FFFFFFFF hStdOut:
FFFFFFFF
HStdError:
FFFFFFFF
Unknown2: 00000001
InheritCon:
00000000
BraekType:
00000000
BraekSem: 00000000
BraekEvent:
00000000
BraekThreadId: 00000000
BrkHandlers:
00000000
Poniższy przykład pokazuje częściowy listing obiektów w Kerenle32
PROC -o krenel32
Handle
Object
Type
1
8165A32C
Process
2
8155BFFC
Event
3
C103E3A4
Memory Mapped file
4
C0FFE0E0
Memory Mapped file
5
C0FFE22C
Memory Mapped file
6
C0FF1058
Memoery Mapped file
7
8155C01C
Event
8
8155CCE4
Event
9
8155CD5C
Event
A
8155CD8C
Thread
B
8155D008
Event
C
C1041C04
Memory Mappped file
D
8155D870
Event
Dla rodziny Windows NT
Poniższy przykład używa polecenia PROC bez parametrów do wylistowania wszystkich procesów w
systemie.
PROC
Process
KPEB PID Thraeds Pri
User
Krnl
Ststus
Time
Time
System
FD8E0020 2
14
8
00000000
00001A48
Ready
smss
FD8B9020 13 6
B
00000022
00000022
Swapped
csrss
FD8B3DC0 1F 12
D
00B416C5
00049C4E
Ready
winlogon
FD9AD020 19 2
D
00000028
00000072
Idle
servixes
FD8A6880 28 B
9
0000018E
0000055A
Idle
lsass
FD8A4020 2A C
9
0000001B
00000058
Idle
spoolss
FD87ACA0 43 6
8
000000AB
000000BD
Idle
nddeagnt
FD872780 4A 1
8
00000004
0000000C
Idle
*ntvdm
FD86DDC0 50 6
9
00125B98
0003C0BE
Running
scm
FD85B300 5D 3
8
00000024
0000008A
Idle
Explorer
FD850020 60 3
D
000002DE
00000447
Ready
Idle
8016A9E0 0
1
0
00000000
00135D03
Ready
Notka: Proces, który był aktywny kiedy pojawił się SoftICE będzie podświetlony. Aktualnie aktywny
proces / kontekst adresu wewnątrz SoftICE będzie wskazywany gwiazdką ( * ).
Poniższy przykład używa opcji rozszerzonej (-x) do wyświetlenia rozszerzonej informacji o
określonym procesie Explorer
PROC –x explorer
Exteneded Process Information for Explorer (60)
KPEB: FD850020
PID: 60 Parent: Unknown (48)
Base Pri: D
Mem Pri: 0
Quantum: 2
Usage Cnt; 1 Win Ver; 4.00 Err. Mode: 0
Status: Ready
Processor: 00000000
Affinity: 1
Page Directory: 011CA000
LDT Base: 00000000
LDT Limit: 0000
Kernel Time: 00000447 User Time: 000002DE
Create Time: 01BB10646E2DBE90
Exit Time: 0000000000000000
Vad Root: FD842E28 Mru Vad: FD842E28 Empty Vad: Fd823D08
DebugPort: 00000000
Except Port: E118B040 SE token: E1240450
SpinLock: 00000000
HUPEB: 00000004 UPEB: 7FFDF000
ForkInProgress: FALSE Thread: 00000000 (0)
Process Lock: 00000001 Owner: 00000000 (0)
Copy Mem Lock: 00000000
Owner: 00000000 (0)
Locked Pages: 00000000 ProtoPTE: 000000DD Modified Pages: 000000E4
Private Pages: 0000014F Virt Size: 013F8000
Peak Virt Size 01894000
------------ Working Set Inforamtion --------------
Update Time: 01BB11D0D7B299C0
Data: C0502000 Table: C0502470
Pages: 00000879 Faults: 00000899 Peak Size: 00000374
Size: 000002AF Minimum: 00000032 Maximum: 00000159
------------Non Pageable Pool Statistic --------------
Quota Usage: 00000E78 Peak Usaage: 00001238
Inherited Usage: 0000C093 Peak Usage: 00056555 Limit: 0008000
----------- Pageable Pool Statistic -------------------
Quota Usage: 00003127 Peak Usage: 00004195
Inherited Usage: 0000C000 Peak Usage: 00004768 Limit: 000009CA
-----------Pagefile Statistic ----------
Quota Usage : 00000151 Peak Usage: 0000016E
Inherited Usage: FFFFFFFF Peak Usage: 00000151 Limit: 00000000
-----------Handle Table Information ------------------
Handle Table: E10CE5E8 Handle Array: E1265D48 Entries: 50
QUERY
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla mapę adresów wirtualnych procesu
Składnia
QUERY [[-x] adres] | [typ procesu]
-x
Pokazuje odwzorowanie dla określonego adresu liniowego wewnątrz każdego
kontekstu gdzie jest poprawny
adres
Liniowy adres zapytania
typ procesu
Wyrażenie ,jakie może być interpretowane jako proces
Użycie Polecenie
QUERY
wyświetla mapę wirtualnej przestrzeni adresowej dla pojedynczego procesu, lub
odwzorowanie dla określonego adresu liniowego. Jeśli żaden parametr nie jest określony, QUERY
wyświetli mapę bieżącego procesu. Jeśli jest określony parametr procesu, QUERY wyświetli
informację o każdym zakresie adresu w tym procesie.
Dane wyjściowe Dla Windows 9x
Dla Windows 9x, polecenie QUERY wyświetli następujące informacje:
Base
Wskaźnik do adresu bazowego regionu stron
AllocBase
Wskaźnik do adresu bazowego zakresu stron alokowanych przez funkcję
VirtualAlloc, która zawiera adres bazowy w kolumnie Base.
AllocProtect
Dostęp chroniony przydzielany kiedy region był początkowo alokowany
Size
Rozmiar, w bajtach, regionu zaczynającego się pod adresem bazowym w którym
wszystkie strony mają ten sam atrybut
State
Stan stron w regionie:
Potwierdzenie – zatwierdzone strony dla których pamięć fizyczna została
alokowana
Wolne – Wolne strony nie są dostępne dla wywoływanych procesów i dostępne
dla alokacji. AllocBase, AllocProtect, Protect i Owner są niezdefiniowane
Zarezerwowane – Zarezerwowane strony. Zakres wirtualnej przestrzeni adresowej
procesu jest zarezerwowany, ale pamięć fizyczna nie jest alokowana. Bieżący Acces
Protection (Protect) jest niezdefiniowany
Protect
Bieżący chroniony dostęp
Owner
Właściciel regionu
Kontekst
Kontekst adresu
Dla rodziny Windows NT
Polecenie QUERY wyświetla następujące informacje:
Context
Kontekst adresu
Address Range
Początkowy i końcowy adres zakresu liniowego
Flags
Flagi ze struktury węzła
MMCI
Wskaźnik do struktury zarządzania pamięcią
PTE
Struktura która zawiera ProtoPTE dla zakresu adresu
Name
Dodatkowa informacja o zakresie. Obejmuje to:
*Pliki odwzorowane w pamięci, które będą nazwy odwzorowanych
plików.
*Moduły wykonywalne, które będą pokazywały nazwę pliku DLL lub
EXE
*Stosy, które będą wyświetlane jako TID (ID wątku)
*Blok informacji wątku, która będzie wyświetlana jako TID
*Dowolny adres jakie może zidentyfikować polecenie WHAT
Przykład
Windows 9x
Poniższy przykład pokazuje częściowy listing danych wyjściowych polecenia QUERY bez żadnych
parametrów. W tym przypadku, wyświetla mapę dla bieżącego procesu GDIDEMO.
QUERY
Base
AllocBase
AllocProt
Size
State
Protect
Owner
0
0
0
400000 Free
NA
400000
400000
1
7000
Commit RO
GDIDEMO
407000
400000
1
2000
Commit RW
GDIDEMO
409000
400000
1
2000
Commit RO
GDIDEMO
40B000
400000
1
5000
Reserve NA
GDIDEMO
410000
410000
1
1000
Commit RW
Heap32
411000
410000
1
FF000 Reserve NA
Heap32
510000
410000
1
1000
Commit RW
Heap32
511000
410000
1
F000
Reserve NA
Heap32
520000
520000
4
1000
Commit RW
521000
520000
4
F000
Reserve NA
Poniższy przykład pokazuje każdy kontekst gdzie adres bazowy 416000 jest poprawny:
QUERY -x 416000
Base
AllocBase
AllocProt
Size
State
Protect Owner
Context
416000 400000
1
F1000 Reserve
NA
KERNEL32
416000 400000
1
E9000 Reserve
NA
Heap32
MSGSRV32
416000 400000
1
D000
Commit
RO
EXPLORER
Explorer
416000 410000
1
F9000 Reserve
NA
Heap32
WINFILE
416000 400000
1
2000
Commit
RO
CONSOLE
Console
416000 400000
1
E9000 Reserve
NA
Heap32
WINOLDAP
416000 410000
0
EA000 Free
NA
Mprexe
416000 410000
1
FA000 Reserve
NA
Heap32
Spool32
Poniższy przykład pokazuje częściowy listing mapy adresu wirtualnego dla Explorer’a
QUERY explorer
Base
AllocBase
AllocProt
Size
State
Protect
Owner
0
0
0
400000 Free
NA
400000
400000
1
23000 Commit RO
EXPLORER
423000
400000
1
1000
Commit RW
EXPLORER
424000
400000
1
11000 Commit RO
EXPLORER
435000
400000
1
B000
Reserve NA
EXPLORER
440000
440000
1
9000
Commit RW
Heap32
449000
440000
1
F7000 Reserve NA
Heap32
540000
440000
1
1000
Commit RW
Heap32
541000
440000
1
F000
Reserve NA
Heap32
550000
550000
4
1000
Commit RW
551000
550000
4
F000
Reserve NA
560000
560000
1
106000 Reserve NA
Rodzina Windows NT
Poniższy przykład używa polecenia QUERY do odwzorowania określonego adresu liniowego dla
Rodziny Windows NT
QUERY 7f2d0123
Context
Address Range Flags
MMCI
PTE
Name
csrrs
7F2D0000-
0600000
FD8AC128
E1191068 Heap #07
Poniższy przykład używa polecenia QUERY do listowania mapy adresów procesu PROGMAN dla
rodziny Windows NT
QUERY progman
Address Range
Flags
MMCI
PTE
Name
00010000-00010FFF
C4000001
00020000-00020FFF
C4000001
00030000-0012FFFF
84000004
STACK (6E)
00130000-00130FFF
C4000001
00140000-0023FFFF
8400002D
Heap #01
00240000-0024FFFF
04000000
FF0960C8
E1249948
Heap #2
00250000-00258FFF
01800000
FF0E8088
E11B9068
unicode.nls
00260000-0026DFFF
01800000
FF0E7F68
E11BBD88
locale.nls
00270000-002B0FFF
01800000
FF0E7C68
E11B6688
sortkey.nls
002C0000-002C0FFF
01800000
FF0E7AE8
E11BBA08
sorttbls.nls
002D0000-002DFFFF
04000000
FF09F3C8
E1249E88
002E0000-0035FFFF
84000001
00360000-00360FFF
C4000001
00370000-0046FFFF
84000003
STACK (2E)
00470000-0047FFFF
04000000
FF0DF4E8
E124AAA8
00480000-00481FFF
01800000
FF0E7DE8
E110C6E8
ctype.nls
01A00000-01A30FFF
07300005
FF097AC8
E1246448
progman.exe
77DE0000-77DEFFFF
07300003
FF0FC008
E1108928
shell32.dll
77E20000-77E4BFFF
07300007
FF0FBA08
E1110A08
advapi32.dll
77E50000-77E54FFF
07300002
FF0FADC8
E1103EE8
rpcltcl.dll
77E60000-77E9BFFF
07300003
FF0FB728
E1110C48
rpcrt4.dll
77EA0000-77ED7FFF
07300003
FF0FCE08
E11048C8
user32.dll
77EE0000-77F12FFF
07300002
FF0FD868
E110F608
gdi32.dll
77F20000-77F73FFF
07300003
FF0EE1A8
E110C768
kernel32.dll
77F80000-77FCDFFF
07300005
FF0FDB48
E1101068
ntdll.dll
7F2D0000-7F5CFFFF
03400000
FF0E2C08
E11C3068
Heap #05
7F5F0000-7F7EFFFF
03400000
FF0E8EA8
E11B77E8
7FF70000-7FFAFFFF
84000001
7FFB0000-7FFD3FFF
01600000
FF116288
E1000188
Ansi Code
Page
7FFDD000-7FFDDFFF C4000001
TIB(2E)
7FFDE000-7FFDEFFF
C4000001
TIB (6E)
7FFDF000-7FFDFFFF
C4000001
SubSystem
Process
R
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Wyświetlenie /Zmiana pamięci
Definicja
Wyświetla lub zmienia wartość rejestru
Składnia
Dla Windows 3.1
R [nazwa rejestru [[=] wartość]]
Dla Windows 9x i rodziny Windows NT
R [-d | nazwa rejestru | nazwa rejestru [=] wartość]
nazwa rejestru
Dowolna z następujących: AL., AH, AX, EAX, BL, BH, EBX, CL, CH,
ECX, DL, DH;DX, EDX, DI, EDI, SI ,ESI, BP,EBP,SP, ESP, IP, EIP,FL
DS., ES, SS, CS, FS, GS
wartość
Jeśli nazwa rejestru jest inna niż FL, wartość ta jest wartością
szesnastkową lub wyrażeniem. Jeśli jest to FL, wartość ta jest szeregiem
jednego lub więcej symboli flag, każda opcjonalnie poprzedzona znakiem
plus lub minus:
*D (flag kierunku)
*I (flaga przerwania)
*S (flaga znaku)
*Z (flaga zera)
*A (flaga przeniesienia pomocniczego)
*P (flaga parzystości)
*C (flaga przeniesienia)
-d
Wyświetla rejestry w oknie Poleceń
Użycie
Jeśli brak parametrów, kursor przesuwa się do okna Rejestrów , a rejestry mogą być edytowane na
swoim miejscu. Jeśli okno Rejestrów nie jest aktualnie widoczne, czyni go widocznym. Jeśli nazwa
rejestru jest podana bez wartości, kursor przesuwa się do okna Rejestrów pozycjonując się na
początku właściwego pola rejestru.
Jeśli jest podana nazwa rejestru i wartość, zawartość określonego rejestru zmienia się na tą wartość.
Dla zmiany wartości flagi użyj FL jako nazwy rejestru, po której następują symbole flagi ze znakiem
plus. Dla wyłączenia flagi poprzedź symbol flagi znakiem minus. Jeśli nie jest określony znak plus
ani minus, wartość flagi zostanie przełączona do jej aktualnego stanu. Flagi mogą być listowane w
dowolnej kolejności
Przykład
Poniższy przykład ustawia rejestr AH równe 5
R ah = 5
Poniższy przykład przełącza wartości flag O, Z i P
R fl =ozp
Poniższy przykład przesuwa kursor do okna Rejestrów pozycjonując pod pierwszym polem flagi
R fl
Poniższy przykład przełącza wartość flagi ), włącza wartość flagi A i wyłącza wartość flagi C
R fl = o+a-c
RS
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
F4
Definicja
Przywraca ekran programu
Składnia
RS
Użycie
Polecenie RS pozwala ci na przywrócenie czasowego ekranu programu. Cecha ta jest użyteczną kiedy
diagnozujemy program, który często aktualizuje ekran. Użyj polecenia RS do ponownego
wyświetlenia ekranu programu. Aby wrócić do ekranu SoftICE naciśnij dowolny klawisz.
S
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Różne
Definicja
Przeszukuje pamięć dla danych
Składnia
Dla Windows 3.1
S [adres L długość lista danych]
Dla Windows 9x i rodziny Windows NT
S [=acu][adres L długość lista danych]
-a
Określa „znajdź wszystkie dopasowane w przeszukiwanym zakresie” w
przeciwieństwie do „znajdź pierwszy dopasowany w przeszukiwanym
zakresie i zatrzymaj”
-c
Czyni przeszukiwanie niezależne do wielkości liter
-u
Przeszukuje ciągi UNICODE
adres
Początkowy adres poszukiwania
długość
Długość w bajtach
lista danych
Lista bajtów lub stałych łańcuchowych oddzielonych przecinkami lub
spacjami. Stała łańcuchowa może być otoczona pojedynczym lub
podwójnym cudzysłowem.
Użycie
Pamięć jest przeszukiwana dla szeregu bajtów lub znaków, które pasują do listy danych.
Przeszukiwanie zaczyna się od określonego adresu i kontynuowane dla zadanej długości. Kiedy już
znaleziono, pamięć spod tego adresu jest wyświetlana w oknie Danych, a następujący komunikat jest
wyświetlany w oknie Poleceń:
PATTERN FOUND AT location
Jeśli okno Danych nie było widoczne ,teraz staje się widoczne Dla przeszukiwania późniejszych
wystapień listy danych użyj polecenia S bez parametrów. To przeszukiwanie będzie kontynuowane
od adresu gdzie została ostatnio znaleziona lista danych, dopóki nie znajdzie innego wystąpienia listy
danych lub długość nie zostanie wyczerpana.
Polecenie S ignoruje strony, które są oznaczone jako nie obecne. Umożliwia to przeszukanie dużych
obszarów przestrzeni adresowej używając płaskiego selektora danych (Windows 3.1 / Windows 9x:
30h, rodzina Windows NT: 10h)
Przykład
Poniższy przykład przeszukuje dla ciągu ‘Hello” po którym następują bajty 12h i 34h zaczynając od
offsetu ES:DI+10 dla długości ECX bajtów
S es:di+10 L ecx ‘Hello’,12, 34
Poniższy przykład przeszukuje całe 4GB wirtualnego zakresu adresu dla ‘string’
S 30:0 L ffffffff ‘string’
SERIAL
OS
Windows 3.1,Windows 9x
Typ
Ustawienia użytkownika
Definicja
Przekierowuje konsolę na szeregowy terminal
Notka: Polecenie SERIAL nie jest obsługiwany przez DriverStudio™ 2.0. Funkcje polecenia
SERIAL są teraz dostępne przez polecenie NET
Składnia
SERIAL [on | VT100 |[port com][szybkość transmisji] | off]
VT100
inicjuje tryb szeregowy VT100
port com
Liczba od 1 do 4, który odpowiada COM1, COM2, COM3 lub COM4.
Domyślnie to COM1
szybkość transmisji
Szybkość transmisji używana dla komunikacji szeregowej. Domyślnie to
SoftICE automatycznie określa najszybszą możliwa szybkość transmisji,
jak może być użyta. Szybkości te to 1200, 2400, 4800, 9600, 19200, 23040
,28800. 38400. 57000, 115200
Użycie
Użyj polecenia SERIAL do nawiązania sesji zdalnego diagnozowania przez port szeregowy. Odnieś
się do DIAL po informacje jak nawiązać zdalną sesję prze modem i do Rozdziału 9 w „Using
SoftICE” po szczegółowe wyjaśnienie tej procedury.
Zdalne diagnozowanie wymaga drugiego PC kompatybilnego z IBM. Maszyna będąca diagnozowaną
jest znana jako maszyna lokalna, a maszyna gdzie SoftICE będzie sterowany zdalnie jest znana jako
maszyna odległa. Aby użyć polecenia SERIAL, maszyny odległa i lokalna muszą być połączone
kablem pseudomodemu z połączeniami jak na poniższym rysunku połączone przez port szeregowy.
Przed użyciem polecenia SERIAL na maszynie lokalnej musisz najpierw uruchomić program
SERIAL32.EXE lub SERIAL.EXE na maszynie odległej. SERIAL32>EXE jest 32 bitowym
klientem. SERIAL.EXE jest klientem trybu rzeczywistego (MSDOS)
Składnia dla programów SERIAL32.EXE i SERIAL.EXE są takie same jak składnia polecenia
SERIAL, więc poniższa informacja ma zastosowanie dla wszystkich.
Polecenie SERIAL ma dwa opcjonalne parametry. Pierwszy parametr określa port komunikacyjny na
maszynie przez który połączenie będzie uczynione. Jeśli nie jest określony żaden port
komunikacyjny, wybrany jest domyślny port COM1. Drugi parametr określa szybkość transmisji.
Jeśli jest określona szybkość transmisji , taka sam szybkość transmisji musi być wyraźnie określona
po obu stronach połączenia. Jeśli żadna szybkość transmisji nie jest określona, SoftICE będzie
próbował określić najszybszą szybkość transmisji jaka może być używana przez połączenia bez
zagubienia danych. Po określeniu maksymalnej szybkości ,SoftICE wskazuje wynik.
Ctrl D jest zawsze sekwencją skrótu klawiaturowego pojawiania się na maszynie odległej. SoftICE
może również pojawić się z lokalnej maszyny z jej sekwencją skrótu klawiaturowego pojawiania się
(która może być ustawiona poprzez polecenie ALTKEY)
Jeśli odległa maszyna ma wyświetlacz monochromatyczny, polecenie COLOR może być zastosowane
do uczynienia danych wyjściowych SoftICE bardziej czytelnymi.
Jeśli z jakiegoś powodu zagubiono daną podczas połączenia a dane wyjściowe SoftICE na maszynie
odległej stają się błędne, na maszynie odległej można wpisać Shift \ (backslash) do wymuszenia
ponownego odmalowania ekranu SoftICE.
Określenie SERIAL OFF zakończy sesję zdalnego diagnozowania a SoftICE rozpocznie ponownie
używanie maszyny lokalnej dla I/O. SERIAL bez parametrów wyświetli bieżący stan szeregowy i
portu komunikacyjnego i szybkości transmisji będących w użyciu jeśli SERIAL jest ON.
Użycie Ctrl – Z zakończy program SERIAL.EXE na odległej maszynie po zakończeniu zdalnej sesji
diagnostycznej.
Jeśli umieścisz polecenie SERIAL w ciągu inicjalizacyjnym SoftICE, SERIAL.EXE musi być
uruchomiony na odległej maszynie zanim SoftICE wystartuje na maszynie lokalnej.
Dla Windows 3.1
Przed zastosowaniem polecenia SERIAL musisz umieścić słowo kluczowe COMn w oddzielnej lini
w pliku WINICE.DAT dla zarezerwowania określonego portu COM dla połączenia szeregowego. N
jest liczbą pomiędzy 1 a 4 przedstawiającą port COM. Jeśli brak tej instrukcji w WINICE.DAT,
SoftICE nie może się pojawić na zdalnej maszynie. Na przykład poniższe słowo kluczowe ustawia
Com 2 jako port szeregowy
Com2
Dla Windows 9x
Wybierz żądany port komutacyjny w ciągu inicjalizacyjnym odległego diagnozowania wewnątrz
Symbol Loader’a
Przykład
Poniższy przykład pokazuje jak uruchomić program SERIAL.EXE na odległej maszynie
SERIAL.EXE on 19200
Poniższy przykład pokazuje jak wykonać polecenie SERIAL na maszynie lokalnej, która odpowiada
poleceniu SERIAL.EXE podanemu w poprzednim przykładzie
SERIAL on 2 19200
Kiedy zostanie wykonane pierwsze polecenie, odległa maszyna będzie przygotowana do odbioru
żądania połączenia z maszyny lokalnej na tym porcie komunikacyjnym przy bps 19200. Drugie
polecenie nawiązuje połączenie pomiędzy dwoma maszynami poprzez drugi port komunikacyjny
maszyny lokalnej. Ponieważ pierwsze polecenie wyraźnie określa szybkość transmisji, polecenie
SERIAL na maszynie lokalnej musi wyraźnie określić taką samą szybkość transmisji czyli 19200 bps.
Kiedy połączenie jest nawiązane, odległa maszyna będzie służyła jako interfejs SoftICE dla
diagnozowania maszyny lokalnej dopóki nie zostanie wprowadzone SERIAL OFF na maszynie
odległej.
SET
OS
Windows 9x i rodzina Windows NT
Typ
Sterownie trybem
Definicja
Wyświetla lub zmienia stan zmiennej wewnętrznej
Składnia
SET [słowo kluczowe][on | off] [wartość]
słowo kluczowe
określona opcja do ustawienia
on, off
włączenie, wyłączenie opcji
wartość
wartość będąca powiązana z opcją
Użycie
Użyj polecenia SET do wyświetlenia lub zmiany stanu wewnętrznych zmiennych SoftICE. Jeśli
określisz SET ze słowem kluczowym, ON lub OFF włączy lub wyłączy tą opcję. Jeśli określisz SET
ze słowem kluczowym i wartością, przypisze wartość do słowa kluczowego. Jeśli po SET występuje
słowo kluczowe bez dodatkowych parametrów, wyświetli stan tego słowa kluczowego. Użycie SET
bez parametrów wyświetli stan wszystkich słów kluczowych
SET obsługuje następujące słowa kluczowe:
ALTSCR
[on|off|mono|vga]
ASSERT
[on|off]
BUTTONREVERSE
[on|off]
CASESENSITIVE
[on|off]
CENTER
[on|off]
CODE
[on|off]
EXCLUDE
[on|off]
FAULTS
[on|off]
FLASH
[on|off]
FONT
[1 | 2 | 3]
FORCEPALETE
[on|off]
I1THERE
[on|off]
I3HERE
[on|off]
LONGTYPENAMES
[on|off]
LOWERCASE
[on|off]
MAXIMIZE
[on|off]
MONITOR
[1 | 2 | 3 | N] (TYTLKO Windows 2000 i XP)
MOUSE
[on|off] [1 | 2 | 3]
ORIGIN
x y (położenie okna w pikselach)
PAUSE
[on|off]
REFFERENCE
[on|off]
SYMBOLS
[on|off]
TABS
[on|off] [1 | 2 | 3 | 4 | 5 | 6 | 7 | 8]
THREADP
[on|off]
TYPEFORMAT
[1 | 2 | 3]
VERBOSE
[on|off]
WHEELLINES
n
SET ASSERT OFF zabezpiecza przed pojawieniem się SoftICE przy RtlAsserts. Tekst będzie
wyświetlony w oknie poleceń i może być podglądnięty przy następnym pojawieniu się. Jeśli jest
wybrane SET ASSERT ON, SoftICE będzie się pojawiał przy każdym RtlAsserts
SET BUTTONREVERSE ON odwraca znaczenie lewego i prawego przycisku myszy
SET CASESENSITIVE ON czyni globalne i lokalne nazwy symboli czułymi na wielkość liter.
Wprowadź je dokładnie jak wyświetlono je przez polecenie SYM.
SET CENTER ON wyśrodkowuje okno SoftICE. Kiedy ręcznie przesuwasz okno, SoftICE wyłącza
wyśrodkowywanie
SET FAULTS OFF zabezpiecza SoftICE przed. pojawieniem się przy błędach trybu użytkownika.
SET FLASH ON będzie powodował przerysowywanie całego ekranu SoftICE po każdym kroku i
śledzeniu.. Włącz to jeśli debuggujesz aplikacje, które renderują ekran i nadpisują wyświetlacz
SoftICE.
SET FONT n zmienia rozmiar czcionki w Uniwersalnym Trybie Wyświetlania. Rozmiar czcionki
nie jest możliwy do zmiany przy VGA, zdalnym debuggowaniu lub monitorach
monochromatycznych .
SET FORCEPALLETTE ON zabezpiecza kolory systemowe przed zmianami w tryb 8 bitów na
piksel.. Zapewnia to ,że wyświetlacz SoftICE może być zawsze widziany. Domyślnie jest OFF.
SET I1HERE ON powoduje pojawienie się SoftICE przy wszystkich instancjach Int 1.
SET I3HERE ON powoduje pojawienie się SoftICE przy wszystkich instancjach Int 3. Jeśli dana
jest opcja DRV, tylko Int3, jakie wystąpią wewnątrz przestrzeni jądra spowodują pojawienie się
SoftICE
SET LONGTYPENAMES OFF wyłącza długie typy nazw. Kiedy ustawisz na ON „długie bez
znaku” będą pokazane jako „ulong”. Wszystkie inne typy będą odpowiednio skrócone.
SET LOWERCASE ON powoduje disasemblacji małych liter. Jeśli ustawimy OFF , dużych liter.
SET MAXIMIZE ON zwymiaruje okno UVD tak duże jak to możliwe. Ustawienie to unieważnia
LINES i WIDTH ale nie FONT. Kiedy możesz zmienić ustawienia LINES lub WIDTH, SoftICE
zmieni je tylko czasowo. Przy kolejnym pojawieniu się SoftICE, wyświetli okno o maksymalnym
rozmiarze. W Windows 2000/XP (tylko) SET MONITOR zmienia monitor używany do
wyświetlania SoftICE. Wpisz wartość dziesiętną reprezentująca monitor jakiego chcesz użyć do
wyświetlenia SoftICE. Wydając polecenie SET MONITOR bez parametrów, listujesz monitory
dostępne SoftICE .Jeśli nie chcesz łączyć SoftICE z określonym sterownikiem video, dodaj
podstawową nazwę sterownika DDI do klucza NTICE\ExcludedDisplayDriver w rejestrze. Lista ta
jest ograniczona średnikami (;)
SET MOUSE ON włącza obsługę myszki a SET MOUSE OFF ją wyłącza. Dla zmodyfikowania
szybkości z jaką myszka się porusza, użyj jednej z następujących wartości : 1 (najwolniej); 2 (średnia
szybkość – domyślna); 3 (najszybsza)
SET SYMBOLS ON instruuje disasembler do pokazania nazw symbolicznych w kodzie
disasemblera. SET SYMBOL OFF instruuje disasembler do pokazania liczb (na przykład offsetów i
adresów) Polecenie to stosuje się zarówno do globalnych jak i lokalnych nazw symbolicznych.
SET TABS n zmienia liczbę spacji stosowanych dla każdego znaku tabulacji
SET THREAD OFF wyłącza określone wątki wewnątrz procesu.
SET TYPEFORMAT N definiuje układ i format lokalnego okna
*SET TYPEFORMAT 1 to <typ> <nazwa zmiennej>= <wartość>
*SET TYPEFORAMT 2 jest domyślnym <nazwa zmiennej> <typ> =<wartość>
*SET TYPEFORMAT 3 to <nazwa zmiennej> = <wartość> <typ> > jest również zmienna winice.dat
do sterowania tym.
SET VERBOSE OFF wyłącza informacje komunikatów SoftICE takie jak LOAD32, UNLOAD32 i
EXIT32
SET WHEELLINES ustawia liczbę lini, które powinny być przewinięte dla każdego ruchu kółka
kiedy używamy myszki Intellipoint
Przykład
Poniższy przykład włącza pułapkowanie zakłóceń SoftICE
SET faults on
Poniższy przykład ustawia myszkę na najszybsze działanie
SET mouse 3
Zobacz
ALTSCR; CODE; FAULTS; I1HERE; I3HERE; THRAEDP
SHOW
OS
Windows 3.1 , Windows 9x
Typ
Symbol / Źródło
Klawisz
Ctrl – F11
Definicja
Wyświetla instrukcje z bufora historii wstecznego śledzenia
Składnia
SHOW [B | start] [ l długość]
B
Wyświetla instrukcje poczynając od najstarszej instrukcji
start
Liczba szesnastkowa określająca indeks wewnątrz bufora historii
wstecznego śledzenia skąd zaczyna disasemblację. Indeks 1 odpowiada
najnowszej instrukcji w buforze
długość
Liczba instrukcji do wyświetlenia
Użycie
Użyj polecenia SHOW do wyświetlenia instrukcji z bufora historii wstecznego śledzenia. Jeśli źródło
jest dostępne dla tej instrukcji, wyświetlana jest w trybie mieszanym; w przeciwnym razie,
wyświetlany jest tylko kod.
Możesz użyć polecenia SHOW tylko jeśli bufor historii wstecznego śledzenia zawiera instrukcje. Dla
wypełnienia tego bufora użyj polecenia BPR z parametrem albo T albo TW do określenia zakresu
punktu przerwania.. Polecenie SHOW wyświetla wszystkie instrukcje i źródło w oknie Poleceń.
Każda instrukcja jest poprzedzona przez jej indeks wewnątrz bufora historii śledzenia. Instrukcja,
której indeks jest 1 jest najnowszą instrukcją w buforze. Ponieważ wpisano SHOW, możesz użyć
klawiszy strzałek w górę i w dół do przewijania przez zawartość bufora historii wstecznego śledzenia.
Dla wyjścia z SHOW naciśnij klawisz Esc. SHOW bez parametrów lub SHOW B będzie wyświetlany
z bufora historii wstecznego śledzenia poczynając od najstarszej instrukcji w buforze. Po SHOW
następuje numer startowy będącej wyświetlaną instrukcji poczynając od określonego indeksu
wewnątrz bufora historii wstecznego śledzenia.
Przykład
Poniższy przykład zaczyna wyświetlanie instrukcji w oknie Poleceń zaczynając od najstarszej
instrukcji w buforze historii śledzenia.
SHOW B
Zobacz
BPR
SRC
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Symbol / Źródło
Klawisz
F3
Definicja
Cykliczne przejścia pomiędzy źródłem, kodem i mieszanym wyświetlaniem w oknie Kodu
Składnia
SRC
Użycie
Użyj polecenia SRC do cyklicznego przechodzenia między następującymi trybami w oknie Kodu:
*Tryb źródła
*Tryb kodu
*Tryb mieszany
Przykład
Poniższy przykład zmienia bieżący tryb okna Kodu
SRC
SS
OS
Windows 3.1,Windows 9x i rodziny Windows NT
Typ
Symbol / Źródło
Definicja
Przeszukuje bieżący plik źródłowy dla ciągu
Składnia
SS [numer lini] [‘ciąg’]
numer linii
Liczba dziesiętna
ciąg
Ciąg znaków otoczonych przez cudzysłowy
Użycie
Polecenie SS przeszukuje bieżący plik źródłowy dla określonego ciągu znaków. Jeśli jest
dopasowany , linia , która zawiera ciąg jest wyświetlona w górnej lini w oknie Kodu
Przeszukiwanie zaczyna się od określonego numeru linii. Jeśli żaden numer lini nie został określony,
przeszukiwanie zaczyna się od górnej lini wyświetlanej w oknie Kodu.
Jeśli nie został określony żaden parametr, przeszukiwanie jest kontynuowane dla poprzednio
określonego ciągu
Okno Kodu musi być widoczne i w trybie źródła, zanim użyjesz polecenia SS. Aby uczynić
widocznym okno Kodu, użyj polecenia WC. Aby okno Kodu wyświetlało źródło użyj polecenia SRC.
Przykład
W poniższym przykładzie bieżący plik źródłowy jest przeszukiwany poczynając od lini 1 dla ciągu
‘if(i==3)’. Linia zawierająca następne wystąpienie ciągu stanie się górną linia wyświetlaną w oknie
Kodu.
SS 1 ‘if (i == 3)’
STACK
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla stos wywołań
Składnia
Dla Windows 3.1 i Windows 9x
STACK [-v | -r] [nazwa zadania | SS:[E]BP]
-v
Opisowo. Wyświetla lokalne zmienne w 32 bitowym kodzie
-r
Przejście cykliczne. Przejście przez przejście cykliczne w kodzie 32 bitowym
nazwa zadania
Nazwa zadania wyświetlanego przez polecenie TASK
SS:[E]BP
poprawna ramka stosu SS:[E]BP
Dla rodziny Windows NT
STACK [-v | -r] [typ wątku | ramka stosu]
typ wątku
Uchwyt wątku lub ID wątku
ramka stosu
Wartość która nie jest typem wątku jest interpretowana jako ramka stosu
Użycie
Użyj polecenia STACK do wyświetlenia stosu wywołań dla programów DOS, zadań Windows i kodu
32 bitowego. Jeśli wpiszesz STACK bez parametrów, bieżący SS:[E]BP jest używany jako baza dla
wyświetlanej ramki stosu .Możesz wyraźnie określić bazę stosu z nazwą zadania lub adres bazowy a
dla rodziny Windows NT, z identyfikatorem wątku.
Jeśli użyjesz STACK do wyświetlenia stosu zadania Windows, które nie jest bieżące, określ albo
nazwę zadania lub poprawny SS: [E]BP ramki stosu. Możesz użyć polecenia TASK dla uzyskania
listy uruchomionych zadań. Jednakże, powinniśmy unikać używania polecenia STACK z bieżącym
zadaniem danych wyjściowych polecenia TASK (oznaczonych ‘*’) ponieważ zadanie ostatnie
znanego SS:[E]BP nie jest dłużej poprawne.
Polecenie STACK przechodzi stos poczynając od bazy poprzez przeglądnięcie ramki stosu. Jeśli
napotkany zostanie zestronicowana niepoprawna ramka stosu lub adres podczas przechodzenia,
przeglądanie zostanie zatrzymane .W kodzie 32 bitowym, przełącznik –r (przejście cykliczne) mówi
SoftICE aby kontynuował przechodzeni stosu poprzez przejście cykliczne . Algorytm przejścia stosu
SoftICE może użyć danej FPO (Pominięcie wskaźnika ramki) do przejścia stosu wywołania. Dana
FPO jest typem informacji diagnostycznej, która jest osadzona w pliku .NMS podczas kroku
tłumaczenia. Dana FPO jest określoną tablicą moduł / symbol. Dlatego też kiedy używamy polecenia
STACK , przydatne będzie posiadanie tablicy symboli dla wszystkich modułów, które są wylistowane
na stosie. Jeśli SoftICE nie ma danej FPO, jest ograniczony tylko do przejścia EBP.
Adres instrukcji wywołania przy każdej ramce jest wyświetlony razem z nazwą podprogramu w
którym jest., jeśli ten podprogram jest znaleziony w dowolnej załadowanej tablicy symboli. Jeśli ten
podprogram nie jest w tablicy symboli, lista eksportów i lista nazw modułów jest poszukiwana dla
najbliższych symboli.
W kodzie 32 bitowym, dane wyjściowe polecenie STACK obejmuje wskaźnik ramki, adres zwrotny i
wskaźnik instrukcji dla każdej ramki. Jeśli ustawisz przełącznik –v, SoftICE również wyświetli
zmienne lokalne dla każdej ramki. Dla każdej ramki w stosie wywołań są wyświetlone zarówno
najbliższy symbol dla instrukcji wywołania i rzeczywisty adres. Jeśli nie ma dostępnych symboli,
zamiast są wyświetlane nazwa modułu i nazwa obiektu / sekcji.
32 bitowy obsługiwany stos wywołań nie jest ograniczony do aplikacji; będzie działał również dla
VxD i sterowników rodziny Windows NT kodu przy ring 0. Ponieważ wiele VxD jest napisanych w
języku assemblera może nie być poprawnym stos wywołań przechodzący przez adres bazowy stosu
VxD. Dla Windows 3.1 i Windows 9x, stos wywołań nie stosuje cyklicznego przejścia, ale pod
Windows NT/2000/XP jest , kiedy ustawisz przełącznik r.
Dla Windows 3.1 i Windows 9x
Jeśli chcesz aby SoftICE pojawiał się kiedy nie aktywne zadanie jest restartowane, możesz użyć
polecenia STACK z zadaniem jako parametrem dla znalezienia adresu na którym ustawiono punkt
przerwania wykonania. Robiąc to wpisz STACK po którym następuje nazwa zadania W dolnej lini
stosu wywołania pokaże się adres poprzedzony słowem „at”. Jest to adres instrukcji CALL jaką
program czyni do Windows , jaki nie jest jeszcze zwrócony. Musisz ustawić punkt przerwania
wykonania na adresie następującym po wywołaniu.
Możesz również użyć tej techniki do zatrzymania na innym podprogramie wyżej na stosie wywołania.
Jest to użyteczne kiedy nie chcesz wykonać pojedynczego kroku przez kod biblioteki dopóki
wykonanie nie wznowi się w kodzie twojego programu.
Przykład
Poniższy przykład pokazuje dane wyjściowe z polecenia STACK –r kiedy umieszczasz punkt
przerwania w próbce Driver :: Works PCIENUM. Użycie parametru –r prowadzi do tego ,że
polecenie STACK przechodzi wcześniej cykliczne przejście w _KiSystemService. Dane wyjściowe
są zorganizowane w trzy kolumny. Kolumna pierwsza to wskaźnik ramki. Kolumna dwa to adres
powrotu. Kolumna trzy to wskaźnik instrukcji.
STACK -r
FC070DE8
F74FC919
Kirp::Kirp+007
FC070E04
F74FC796
Kdevice::DeviceIrpDispatch+003C
FC070E18
801FE4F8
Kdriver::DriverIrpDispatch+0026
FC070E30
8016EBF8
IofCallDriver+0037
FC070E48
8016CDF7
_IopSynchronousServiceTail+006A
FC070ED8
8013DC14
_NtReadFile+0683
FC070F04
77F67E87
_KiSystemService+00C4
0012FE04
77F0D300
ntdll !.text+6E87
0012FE6C
100011A0
_ReadFile+01A6
0012FEDC
00401057
PCIDLL! .text+01A0
0012FF80
004017C9
PCIEXE! .text+0057
0012FFC0
77F1BA3C
PCIEXE! .text+07C9
0012FFF0
000000000
_BaseProcessStart+0040
Poniższy przykład pokazuje ten sam stos w jak poprzednim przykładzie, ale wyświetlony poleceniem
STACK -V –R. Przełącznik –v powoduje ,że będą wyświetlone lokalne zmienne dla każdej ramki
STACK -v -r
F74AFDE8
F74FC919
Kirp::Kirp+0007
[EBP-4] + const class Kirp 8 this = 0xF74AFDF4 <{...}>
[EBP+8]+struct _IRP*pIrp =0x84C460E8 <{...}>
F74AFE04
F74FC796
Kdevice::DeviceIrpDispatch+003C
[EBP-C] + const class Kdevice * this =0x807DC7A8 <{...}>
[EBP-4] unsigned long Major = 0x3
[EBP+8] + struct _IRP * pIrp = 0x84C460E8 <{...}>
F74AFE18
801FE4F8
Kdriver::DriverIrpDispatch+0026
[EBP+8] + struct _ Device _OBJECT * psysDev = 0x807DB850 <{...}>
[EBP+C] + struct _IRP *pIrp = 0x84C460E8 <{...}>
F74AFE30
8016EBF8
@IgCallDriver+0037
F74AFE48
8016CDF7
_ IopSynchronousServiceTail+006A
F74AFED8
8013DC14
_NtReadFile+0683
F74AFF04
77F67E87
_KiSystemService+00C4
0012FE04
77F0D300
ntdll!. Text+6E87
0012FE6C
100011A0
_ReadFile+01A6
0012FEDC
00401057
PCIDLL! .text+01A0
0012FF80
0004017C9
PCIEXE! .text+0057
0012FFC0
77F1BA3C
PCIEXE! .text+07C9
0012FFF0
00000000
_BaseProcessStart+0040
Poniższy przykład pokazuje dane wyjściowe polecenia STACK w trybie 16 bitowym. Polecenie może
być wydane bez żadnych parametrów, po tym jak punkt przerwania jest ustawiony na uchwycie
komunikatu programu Windows
STACK
_astart at 0935:1021 [?]
WinMAin at 0935:0d76 [00750]
[BP+000C] hImnstance 0935
[BP+000A] hPrev 0000
[BP+0006] lpszCmdLine
[BP+0004] CmdShow
[BP-0002] width 00DD
[BP-0004] hWnd 00E5
USER! SENDMESSAGE + 004F at 05CD:06A7
USER (01) at 0595:04A0 [?] 0595:048b
USER (06) at 05BD : 1A83 [?]
=>ClockWndProc at 0935:006F [0179]
[BP+000E] hWnd 1954
[BP+000C] message 0024
[BP+000A] wParam 0000
[BP+0006] lParam 06ED:07A4
[BP-0022] ps 0000
Każde wejście w stosie wywołania w postaci 16 bitowej zawiera następujące informacje:
*Nazwę symboliczną lub nazwę modułu na który przypada adres zwrotny
*Wartość SS:[E]BP tego wejścia
*Jeśli jest dostępna, numer lini źródłowej instrukcji wywołania
*Adres pierwszej lini tego podprogramu lub nazwa podprogramu który został wywołany dla dotarcia
do tego podprogramu
Jeśli zmienne stosu są dostępne dla tego wejścia, wyświetlana jest następująca informacja o każdym:
*offset względny SS:[E]BP
*Nazwa zmiennej stosu
Dana w zmiennej stosu jeśli jest to typ char, int lub long
SYM
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Symbol / Źródło
Definicja
Wyświetla lub ustawia symbol
Składnia
SYM [[nazwa sekcji] ! ] nazwa symbolu [wartość]]
nazwa sekcji
Poprawna nazwa sekcji lub częściowa nazwa sekcji. Możesz użyć
tego parametru do wyświetlenia symboli w określonej sekcji. Jeśli jest
określona nazwa sekcji, musi po niej następować wykrzyknik (!). Na
przykład, możesz użyć polecenia SYM .TEXT! do wyświetlenia
wszystkich symboli w sekcji .TEXT
!
Jeśli ! jest jedynym określonym parametrem, listowane są moduły w tej
tabeli symboli.
nazwa symbolu
Poprawna nazwa symbolu. Nazwa symbolu może kończyć się gwiazdką
(*). Pozwala to przeszukiwać tylko jeśli znana jest pierwsza część nazwy
symbolu.. Znak przecinka „,” może być użyty jako znak wieloznaczności w
miejscu znaków nazwy symbolu.
wartość
Określony adres dla którego jest ustawiany symbol. Parametr wartość jest
używany do ustawiania symbolu do określonego adresu.
Użycie
Użyj polecenia SYM do wyświetlenia i ustawienia adresów symboli. Jeśli wpiszesz SYM bez
parametrów , zostaną wyświetlone wszystkie symbole. Adres każdego symbolu wyświetla kolejną
nazwę symbolu.
Jeśli określisz nazwę symbolu bez wartości, wyświetli się nazwa symbolu i jego adres. Jeśli nie
znaleziono nazwy symbolu, nic nie jest wyświetlane.
Jeśli określisz nazwę sekcji po której następuje wykrzyknik (!) a potem nazwa symbolu lub gwiazdka
(*), SYM wyświetli tylko symbole z określonej sekcji. Polecenie SYM jest często użyteczne dla
znajdowania symboli kiedy zapamiętałeś tylko część nazwy, Metody dwóch znaków wieloznaczności
są dostępne dla lokalizowania symboli . jeśli określisz nazwę symbolu zakończoną gwiazdką (*),
SYM wyświetli wszystkie symbole, które pasują do aktualnie wpisanych znaków przed gwiazdką,
bez względu na ich kończące znaki. Jeśli używasz przecinka (,) w miejsce znaku w nazwie symbolu,
ten znak jest znakiem wieloznaczności.
Jeśli określisz wartość ,adres wszystkich symboli, które pasują do nazwy symboli są ustawiane na tą
wartość.
Przykład
Poniższy przykład wyświetla wszystkie symbole, które zaczynają wyświetlać FOO
SYM foo
Poniższy przykład ustawia wszystkie symbole, które zaczynają się FOO na adresie 6000
SYM foo* 6000
Poniższy przykład wyświetla wszystkie sekcje dla bieżącej tablicy symboli
SYM !
Poniższy przykład wyświetla wszystkie symbole w sekcji MAIN, który zaczyna się FOO
SYM main! foo*
SYMLOC
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Symbol / Źródło
Definicja
Relokuje symbol bazowy
Składnia
Dla Windows 3.1
SYMLOC [adres segmentu | o | r | (numer sekcji selektor adres liniowy)]
Dla Windows 9x i rodziny Windows NT
SYMLOC [adres segmentu | o | r | -c typ procesu | (numer sekcji selektor adres liiowy)]
adres segmentu
Parametr ten jest używany tylko do relokowania programów MSDOS
o
Tylko dla tablicy 16 bitowej Windows. Zmienia wszystkie wartości
selektora wracają do swoich pierwotnych stanów.
r
Tylko dla 16 bitowych tablic Windows. Zmienia wszystkie segmenty
porządkowe do ich właściwej wartości selektora
-c
Określa wartość kontekstu dla tablicy symboli. Używany kiedy
debuggujemy rozszerzone aplikacje DOS
numer sekcji
Tylko dla tablic 32 bitowych
selektor
Tylko dla tablic 32 bitowych .Selektor trybu chronionego
adres liniowy
Tylko dla tablic 32 bitowych. Adres bazowy sekcji
Użycie
Polecenie SYMLOC obsługuje symbole w załadowanej tablicy symboli. Polecenie obejmuje obsługę
tablic DOS, 16 bitowy tryb chroniony tablic Windows (używając tylko poleceń O i R) i 32 bitowe
tablice trybu chronionego. W programie MS-DOS, SYMLOC relokuje segment komponentów
wszystkich symboli względnych do określonego adresu segmentu. Funkcja ta jest konieczna kiedy
debuggujemy załadowane sterowniki lub inne programy, które nie mogą być załadowane
bezpośrednio z Symbol Loader’a.
Kiedy relokujemy dla ładowalnego sterownika, używamy wartości adresu bazowego sterownika jaki
znajdujemy poleceniem MAP .Kiedy relokujemy program .EXE, wartość jest o 10h większa niż ta
znaleziona jako baza w poleceniu MAP. Kiedy relokujemy dla programu .COM, użyj bazowego
adresu segmentu, znalezionego poleceniem MAP. Polecenie MAP wyświetla przynajmniej dwa
wejścia dla każdego programu. Pierwsze jest zazwyczaj otoczeniem a drugie programem. Adres
bazowy programu jest wartością relokowalną.
Dla Windows 9x i rodziny Windows NT
Opcja SYMLOC –C pozwala ci powiązać określony kontekst adresu z bieżącą tablicą symboli. Opcja
ta jest użyteczna dla debuggowania dłuższej aplikacji na platformie rodziny Windows NT gdzie
SoftICE nie może powiązać kontekstu z tablicą symboli automatycznie.
Przykład
Poniższy przykład relokuje wszystkie segmenty we względnej tablicy symboli do 1244. +10 relokuje
TSR, który był pierwotnie plikiem .EXE. jeśli jest to plik .COM lub ładowalny sterownik DOS, +10
nie jest konieczne
SYMLOC 1244 +10
Poniższy przykład relokuje wszystkie symbole w sekcji 1 tablicy do 4010000h używając selektora
1Bh. Każda sekcja 32 bitowej tablicy musi być relokowana oddzielnie
SYMLOC 1 1b 401000
Poniższy przykład ustawia kontekst bieżącej tablicy symboli procesu, którego ID to 47. Później,
kiedy symbole są używane ,SoftICE automatycznie przełącza do tego procesu
SYMLOC -c 47
T
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Sterownie przepływem
Klawisz
F8
Definicja
Śledzi jedną instrukcję
Składnia
T [=adres startowy] [licznik]
adres startowy
Adres od którego zaczyna się wykonywanie
licznik
Określa ile razy SoftICE powinien wykonać prace krokowa
zanim się zatrzyma
Użycie
Polecenie T używa flagi pojedynczego kroku do pracy krokowej jednej instrukcji. Wykonywanie
zaczyna się spod bieżącego CS:IP, chyba ,że określisz parametr adresu startowego. Jeśli określisz ten
parametr, CS:IP jest zmieniony przed pracą krokowa. Jeśli określisz licznik., SoftICE zlicza pracę
krokową. Użyj klawisza Esc do zakończenia pracy krokowej z licznikiem.
Jeśli jest widoczne okno Rejestrów kiedy pojawia się SoftICE, wszystkie rejestry, które zostały
zmienione ponieważ wydano polecenie T wyświetlane są z pogrubionym atrybutem video. Jeśli okno
Kodu jest w trybie źródła, polecenie to pracuje krokowo do kolejnej instrukcji źródła
Przykład
Poniższy przykład pracuje krokowo przez osiem instrukcji poczynając od komórki CS:1112
T = cs:1112 8
TABLE
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Symbol / Źródło
Definicja
Zmienia lub wyświetla bieżąca tablicę symboli
Składnia
Dla Windows 3.1
TABLE [[r] częściowa nazwa tablicy] | autoon | autooff | $
Dla Windows 9x i rodziny Windows NT
TABLE [nazwa częściowa tablicy] | autoon | autooff | $
r
Usuwanie tablicy określonej przez częściową nazwę tablicy
częściowa nazwa tablicy Nazwa tablicy symboli lub przynajmniej pierwsze kilka znaków
definiujących unikalną nazwę
autoon
Słowo kluczowe, które włącza automatyczne przełączanie tablicy
autooff
Słowo kluczowe, które wyłącza automatyczne przełączanie tablicy
$
Wyszczególnienie $ przełącza tablicę gdzie jest umieszczona bieżący
wskaźnik instrukcji
Użycie
Jeśli nie określisz żadnego parametru, wszystkie aktualnie załadowane tablice symboli są
wyświetlane z podświetleniem bieżącej tablicy symboli. Jeśli określisz częściową nazwę tablicy,
tablica ta staje się bieżącą tablicą symboli. Używając polecenia TABLE kiedy masz załadowane wiele
tablic symboli , SoftICE obsłuży tablice symboli dla 16- i 32 bitowych aplikacji Windows i DLL’i, 32
bitowych VxD Windows, sterowników rodziny Windows NT, programów DOS, ładowalnych
sterowników DOS i TSR’ów
Symbole są dostępne w danym czasie z jednej tablicy symboli. Musisz użyć polecenia TABLE do
przełączenia do tablicy symboli zanim użyjesz symbolu z tej tablicy. Jeśli użyjesz słowa kluczowego
AUTOON, SoftICE przełączy bieżącą tablicę do tablicy w jakiej jest wskaźnik instrukcji kiedy
pojawia się SoftICE. AUTOOFF wyłącza ten tryb.
Tablice nie są automatycznie usuwane kiedy program się kończy. Jeśli przeładujesz swój program
Symbol Loaderem, tablica symboli odpowiadająca załadowanemu programowi jest zastępowana tą
nową
Dla Windows 3.1
Jeśli nazwę częściową tablicy poprzedza parametr R, określona tablica jest usuwana. Określenie
gwiazdki (*) po parametrze R usuwa wszystkie tablice symboli.
Dla Windows 9x i rodziny Windows NT
Tablice symboli mogą być związany z pojedynczym kontekstem adresu lub wieloma kontekstami
adresu. Jeśli tablica jest związana z pojedynczym kontekstem, przełączenie do tej tablicy przy użyciu
polecenia TABLE przełącza do właściwego kontekstu adresu. Jeśli używasz symbol z tablicy
kontekstowej, SoftICE przełącza do tego kontekstu. Użyj „View Symbol Tables” w Symbol Loaderze
do usunięcia tablic z pamięci. Parametr R nie jest obsługiwany
Przykład
W tym przykładzie, polecenie TABLE użyte bez parametrów, listuje wszystkie załadowane tablice
symboli. W tych próbnych danych wyjściowych, podświetlone jest GENERIC ponieważ jest bieżącą
tablicą. Ilość dostępnych tablic symboli pamięci jest wyświetlana u dołu.
TABLE
MYTSR.EXE
MYAPP.EXE
MYVXD.
GENERIC
006412 bajtów tablic symboli pamięci jest dostępnych
W poniższym przykładzie, bieżąca tablica jest zmieniona na MYTSR.EXE. Zauważmy ,że jest
wpisanych wystarczająca ilość znaków dla identyfikacji unikalnej tablicy
TABLE myt
TASK
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla listę zadań Windows
Składnia
TASK
Użycie
Polecenie TASK wyświetla informację o wszystkich zadaniach jakie są aktualnie uruchomione.
Zadanie na którym się skupiamy jest wyświetlane z gwiazdką po swojej nazwie. Polecenie to jest
użyteczne kiedy wystąpi ogólny błąd ochrony ponieważ wskazuje jaki program powoduje błąd.
Dla rodziny Windows NT
Polecenie TASK jest określonym procesem i pokazuje tylko 16 bitowe zadania kiedy używamy
platform rodziny Windows NT. Dodatkowo jest użyteczne tylko kiedy bieżący kontekst jest tym
procesem NTVDM zawierającym okienko WOW. Aby zobaczyć informację o innych procesach
odnieś się do polecenia PROC.
Dane wyjściowe Dla każdego uruchomionego zadania są wyświetlane następujące informacje:
Task Name
Nazwa zadania
SS:SP
Adres stosu zadania kiedy zrezygnował ze sterowania
StackTop
Szczyt offsetu stosu
StackBot
Dół offsetu stosu
StackLow
Najniższa wartość jaką miał SP kiedy był kontekstowy daleko od zadania
TaskDB
Selektor dla bazy danych zadania
hQueue
Uchwyt kolejki dla zadania. Jest to w zasadzie selektor dla kolejki
Events
Liczba zaległych zadań w kolejce
Dla Windows 3.1 i Windows 9x
Polecenie TASK działa z zdaniami 16- i 32 bitowymi, jednak, poniższe pola zmieniają się dla zadań
32 bitowych;
StackBot
Najwyższy poprawny adres stosu pokazany jako 32 bitowy płaski offset
StackTop
Najniższy poprawny adres stosu pokazany jako 32 bitowy płaski offset
StackLow
Pole nie używane
SS:SP
Zawiera 16 bitowy adres selektor offset stosu. Jeśli zbadasz adres bazowy
16 bitowego selektora zobaczysz że wskazuje tą samą pamięć jak 32
bitowy płaski wskaźnik używany z 32 bitowym selektorem danych
Przykład
Poniższy przykład pokazuje jak używać polecenia TASK w Windows 3.1 uruchamiającym Win32 i
jego dane wyjściowe
TASK
TakNm
SS:SP
StackTo
StackBo
Low
TaskDB
hQueue Events
FREECELL
21BF:7D96
86CE000
86D0000
10FF
121F
0000
PROGMAN
17A7:200A
0936
2070
14CE
064F
07D7
0000
CLOCK
1427:1916
02E4
1A4E
143E
144F
1437
0000
MSWORD
*29AF:913E
5956
93A4
7ADE 1F67
1F47
0000
THRAED
OS
Windows 9x
Typ
Informacja systemowa
Definicja
Wyświetla informację o wątkach
Składnia
THRAED [TCB | ID | nazwa zadania]
TCB
Blok Sterowania Wątkiem
ID
Numer ID wątku
nazwa zadania
Nazwa aktualnie uruchomionego 32 bitowego procesu
Użycie
Użyj polecenia THRAED do uzyskania informacji o wątku
*Jeśli nie określisz żadnej opcji lub parametrów, polecenie THREAD wyświetli informację dla
każdego aktywnego wątku w systemie.
*Jeśli określisz nazwę zadania jako parametr ,wszystkie aktywne wątki dla tego procesu są
wyświetlane
*Jeśli określisz TCB lub ID, tylko informacje dla tego wątku będą wyświetlone
Dane wyjściowe Dla każdego wątku są pokazywane następujące informacje :
Ring0TCB
Adres Ring-0 bloku kontrolnego wątku. Jest to adres, który jest przekazany
do VxD’ków dla stworzenia i zakończenia wątku
ID
ID VMM Wątku
Context
Uchwyt kontekstu powiązanego z wątku procesu
Ring3TCB
Adres bloku kontrolnego wątku KERNEL32 Ring-3
ThreadID
ID wątku Ring-3
Process
Adres bazy danych procesu KERNEL32, który posiada wątek
TaskDB
Selektor bazy danych zadań, które posiadają wątek
PDB
Selektor bazy danych programu (PSP trybu chronionego)
SZ
Rozmiar wątku , który może być albo 16- albo 32 bitowy
Owner
Nazwa procesu właściciela
Jeśli określisz TCB lub ID, poniższe informacje wyświetlą się dla wątku z określonym TCB lub ID:
*Bieżąca zawartość rejestru dla tego wątku
*Wszystkie offsety lokalnej pamięci wątku wewnątrz wątku. Pokazuje to offsety w bloku kontrolnym
wątku wejścia VMM TLS, zawartość wejścia TLS i właściciela wejścia TLS.
Przykład
Poniższy przykład wyświetla wątek, który należy do procesu Winword
THRAED
Ring0T
ID
Context
Ring3T Thread Process TaskDB PDB
SZ
Owner
CB
CB
ID
C10518
008B
C104B990
815842 FFF0671F 8158AAA8 274E
25B7
32
*Winword
Poniższy przykład pokazuje częściowy listing informacji zwracanej o wątku z ID 8B
THREAD 8B
Ring0T
ID
Context
Ring3T Thread Process TaskDB PDB
SZ
Owner
CB
CB
ID
C1051808
008B
C104B990
815842C FFF0671F 8158AAA8 274E
25B7
32
*Winword
CS:EIP=0137:BFF96868 SS:ESP=0137F:0062FC3C DS.=013F ES:013F FS=2EBF GD=0000
EAX=002A002E EBX=815805B8 ECX=815842CC EDX=815805B8 I S P
ESI=00000000 EDI=815805B8 EBP=0062FC80 ECODE=00000000
TLS Offset 007C = 00000000 VPICD
TLS Offset 0080= 00000000 DOSMGR
TLS Offset 0084 = 00000000 SHELL
TLS Offset 0080 = C1053434 VMCPD
TLS Offset 008C = C104EA74 VWIN32
TLS Offset 0090 = 00000000 VFAT
TLS Offset 0094 = 00000000 IFSMgr
Zobacz
WT (Win9x)
THREAD
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o wątku
Składnia
THRAED [-r | -x | -u | -w] [typ wątku | typ procesu]
-r
Wyświetla wartość rejestrów wątku
-x
Wyświetla rozszerzoną informację dla każdego wątku
-u
Wyświetla wątki z komponentami poziomu użytkownika
-w
Wyświetla listę obiektów , które obsługuje ten wątek
typ wątku
Uchwyt wątku lub ID wątku
typ procesu
Uchwyt procesu, id procesu lub nazwa procesu
Użycie
Użyj polecenia THREAD dla uzyskania informacji o wątku
*Jeśli nie określisz żadnej opcji lub parametru, polecenie THRAED wyświetla informacje dla
każdego aktywnego wątku w systemie.
*Jeśli określiłeś typ procesu jako parametr, wszystkie aktywne wątki dla tego procesu zostaną
wyświetlone.
*Jeśli określisz typ wątku, tylko informacja dla tego wątku zostanie wyświetlona.
Dla opcji –R i –X pokazane rejestry są tymi , które są zachowane dla przełączenia kontekstu wątku:
ESI, EDI, EBX i EBP
Dane wyjściowe Dla każdego wątku, poniższe informacje sumaryczne są wyświetlone;
TID
ID wątku
Krnl TEB
Blok Środowiska Wątku Jądra
StackBtm
Adres dolnego stosu wątku
StackTop
Adres początkowy stosu wątku
StackPtr
Wartość wskaźnika wątków bieżącego stosu
User TEB
Blok środowiska wątku użytkownika
Process(Id)
Nazwa procesu właściciela i id procesu
Kiedy określisz rozszerzone dane wyjściowe (-x), THRAED wyświetli wiele pól informacji o blokach
środowiska wątku. Większość z tych pól jest oczywistych, ale niektóre są szczególnie użyteczne i
zasługują na podkreślenie:
TID
ID wątku
KTEB
Blok Środowiska Wątku Jądra
Base Pri, Dyn. Pri
Bazowy priorytet wątku i bieżący wątek
Mode
Wskazuje czy wątek jest wykonywany w trybie użytkownika lub
Jądra
Switches
Liczba przełączników kontekstów uczynionych przez wątek
Affinity
Afiniczność procesora maski wątku.. Pozycje bitów które są
ustawione przedstawiają procesory na których wątek może się
wykonywać
Restart
Adres przy którym wątek rozpocznie wykonywanie kiedy
jest wznowiony
Śledzenie stosu wątku jest wyświetlone ostatnie
Przykład
Poniższy przykład używa polecenia THREAD do wyświetlenia wątków, które należą do procesu
Explorer:
THREAD explorer
TID
Krnl TEB
StackBtm
StkTop
StackPtr
User TEB
Proces (Id)
006A
FD857DA0
FB1CB000
FB1CD000
FB1CCED8
7FFDE000
Explorer(6B)
006F
FD854620
FB235000
FB237000
FB236B2C
7FFDD000
Explorer(6B)
007C
FD840020
FD72F000
FD731000
FD730E24
7FFDB000
Explorer(6B)
Poniższy przykład wyświetla rozszerzoną informację o wątku z ID 5Fh:
THRAED –x 5f
Extended Thraed Info for thread 5F
KTEB: FD850D80
TID: 05F
Process: Explorer (60)
Base Pri: D
Dyn. Pri: E
Quantum: 2
Mode: User
Suspenmded: 0 Switches: 00024B4F
TickCount; 00EE8DA4 Wait Irql : 0
Status; User Wait for WrEventPair
Start EIP:
KERNEL32! LeaveCriticalSection+0058 (6060744C)
Affinity: 00000001
Context Flags: A
KSS EBP: FB1C3F04
Callback ESP: 00000000
Kernel Stack: FB1C2000 – FB1C4000
Stack Ptr: FB1C3ED8
User Stack: 00030000 – 00130000
Stack Ptr: 0012FE3C
Kernel Time: 0000014A
User Time: 0000015F
Create Time: 01BB10646E2DBE90
SpinLock; 00000000
Service Table: 80174A40 Queue: 00000000
SE Token: 00000000
SE Acc. Flags: 001F03FF
UTEB: 7FFDE000
Except Frame; 0012FEB4 Last Err: 00000006
Registers: ESI=FD850D80
EDI= 0012FEC4 EBX=77F6BA0C
EBP = FB1C3F04
Restart: EIP=80168757 a.k.a. _KISetServrWaitClientEvent+01CF
Explorer! .text+975D at 001B:0100A75D
Explorer! .text+9945 at 001B:0100A945
Explorer! .text+A3F8 at 001B:0100B3F8
USER32!WaitMessage=004F at 001B:60A0CA4B
User32! .tezt+070A at 001B; 60A0170A
Ö
ntdll!CsrClientSendMessage + 0072 at 001B:77F6BA0C
Zobacz
WT (rodzina WinNT)
TIMER
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informację o obiekcie zegar
Składnia
TIMER [adres zegara]
adres zegara
Lokacja obiektu zegara
Użycie
Wyświetla obiekt zegara systemowego lub zawartość określonego obiektu zegara
Przykład
Poniższy przykład pokazuje część danych wyjściowych polecenia TIMER kiedy wydano go bez
parametrów.
TIMER
Timer
DPC Address
DPC Context
Remaining
Signaled
Period
Object
Time
Symbol
80706588
10.233s
FALSE
80681C48
10.233s
FALSE
8074E108
62.787s
FALSE
80730DE8
10.248s
FALSE
FBDA3980
FBD47C80
00000000
18.588ms
FALSE
Ntice! .text+ 000479C0
FC392EB0
F74D0B4C
FC392E80
19.884ms
FALSE
TDI! .text+088C
806DAD68
22.633ms
FALSE
8066A108
29.323ms
FALSE
807946D8
80802E90
807946A8
180.777s
FALSE
807AF048
59.942ms
FALSE
8078D1A8
80802EF0
8078D1A8
79.971ms
FALSE
807079C8
5.223s
FALSE
8074B108
68.043s
FALSE
8073D108
159,510ms
FALSE
Poniższy przykład pokazuje dane wyjściowe z TIMER kiedy jest wydane dla określonego obiektu
zegara.
TIMER 80793568
Timer Object at 80793568
Dispatcher Type: 08
Dispatcher Size: 010A
Signal State: Not Signaled
Dispatch Wait List Forward Link ; <self>
Dispatch Wait List Back Link; <self>
Remaining Time: 349.784ms
Timer List Forward Link: 8014D828
Timer List Back Link: 8014D828
Timer Object is NOT Periodic
Timer DPC; 80793548
DPC Routine: F74D0B4C
TDI! .text+ 088C
DPC Context: 80793538
Zobacz
APC; DPC
TRACE
OS
Windows 3.1, Windows 9x
Typ
Symbol /Źródło
Klawisz
CTRL – F9 (TRACE B: CTRL- F12)
Definicja
Wprowadza lub zamyka tryb symulacji Śledzenia
Składnia
TARCE [b | off | start]
b
Początek śledzenia od najstarszej instrukcji w buforze historii śledzenia
wstecznego.
off
Wyjście z trybu symulacji śledzenia
start
Liczba heksadecymalna określająca indeks wewnątrz bufora historii
śledzenia wstecznego od którego zaczynamy śledzenie. Indeks 1
odpowiada najnowszej instrukcji w buforze.
Użycie
Użyj polecenia TRACE do wpisania, wyjścia i wyświetlenia bieżącego stanu trybu symulacji
śledzenia . TRACE bez parametrów wyświetla bieżący stan trybu symulacji śledzenia. TRACE po
którym następuje off wychodzi z trybu symulacji śledzenia i wraca do regularnego trybu
debuggowania .Wpisanie TRACE B trybu symulacji śledzenia zaczyna od najstarszej instrukcji w
buforze historii śledzenia wstecznego. TRACE po którym następuje numer startowy wprowadzający
tryb symulacji śledzenia pod określonym indeksem wewnątrz bufora historii śledzenia wstecznego.
Możesz użyć trybu symulacji śledzenia tylko jeśli bufor historii śledzenia wstecznego zawierającego
instrukcje. Dla wypełnienia bufora historii śledzenia wstecznego użyj polecenia BPR z parametrem
T lub TW do określenia zakresu punktu przerwania. Kiedy tryb symulacji śledzenia jest aktywny,
linia pomocy na dole ekranu SoftICE sygnalizuje tryb śledzenia i wyświetla indeks bieżącej instrukcji
wewnątrz bufora historii śledzenia wstecznego.
Użyj poleceń XT, XP i XG do przejścia przez instrukcje w buforze historii śledzenia wstecznego z
wnętrza trybu symulacji śledzenia. Kiedy przechodzimy przez bufor historii śledzenia wstecznego,
jedynie rejestr jaki jest zmieniany to rejestr EIP, ponieważ zakres śledzenia wstecznego NIE zapisuje
zawartości wszystkich rejestrów. Możesz użyć wszystkich poleceń SoftICE wewnątrz trybu symulacji
śledzenia z wyjątkiem następujących: X, T, G, P, HERE i XRSET
Przykład
Poniższy przykład wprowadza tryb symulacji śledzenia poczynając od ósmej instrukcji w buforze
historii śledzenia wstecznego
TRACE 8
Zobacz
BPR; BPRW; SHOW
TSS
OS
Windows3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla segment stanu zadań i hookowane porty I/O
Składnia
Dla Windows 3.1
TSS
Dla Windows 9x i rodziny Windows NT
TSS [selektor TSS]
selektor TSS
Dowolny selektor GDT który przedstawia TSS
Użycie
Polecenie to wyświetla zawartość segmentu stanu zadań po odczytaniu rejestru zadań (TR) dla
uzyskania jego adresu. Możesz wyświetlić dowolny 32 bitowy TSS przez wprowadzanie poprawnego
32 bitowego selektora Bramki Zadań jako parametru. Użyj polecenia GDT dla znalezienia selektorów
TSS. Jeśli nie określisz parametrów, pokazany jest bieżący TSS
Dane wyjściowe Wyświetlana jest poniższa informacja:
TSS selector value
Numer selektora TSS
selector base
Adres liniowy TSS
selector limit
Rozmiar TSS
Kolejne cztery linie pokazują zawartość pół rejestru w TSS. Wyświetlane są poniższe rejestry:
LDT, GS, FS, DS.,SS, CS, ES, CR3
EAX, EBX, ECX, EDX, EIP
ESI, EDI, EBP, ESP, EFLAGS
Level 0, 1 i 2 stos SS:ESP
Dla Windows 3.1 i Windows 9x
Pod Windows 3.1 i Windows 9x, polecenie TSS również wyświetla tablice maski bitowej TSS.
Tablica maski bitowej pokazuje każdy port I/O, shookowany przez sterownik wirtualny Windows
(VxD). Dla każdego portu wyświetlana jest następująca informacja:
numer portu
16 bitowy numer portu
sterownik adresu
32 bitowy płaski adres sterownika portu I/O. Wszystkie instrukcje
I/O na tym porcie będą odbiciem tego sterownika
nazwa sterownika
Nazwa symboliczna sterownika I/O dla portu. Jeśli są dostępne
symbole dla VxD, wyświetlany jest najbliższy symbol; w
przeciwnym razie wyświetlana jest nazwa VxD po której
następuje offset sterownika wewnątrz VxD
Dla Windows 9x i rodziny Windows NT
Windows 9x i rodzinie Windows NT, polecenie TSS również wyświetla bazową mapę zezwolenia
I/O i rozmiar. Rozmiar zero wskazuje, że wszystkie I/0 Są pułapkowane. Rozmiar nie zerowy
wskazuje , że mapa zezwolenia określa czy port I/O jest pułapkowany
Przykład
Poniższy przykład wyświetla segment stanu zadań w oknie Poleceń. Dane wyjściowe maski bitowej
są skrócone.
TSS
TR=0018
BASE=C000AEBC
LIMIT=2069
LDT=0000
GS=0000
FS=0000
DS.=0000
SS=0000 CS=0000 ES=0000
CR3=00000000
EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 EIP=00000000
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
EFL=00000000
SS0=0030:C33EEFA8
SS1=0000:00000000
SS2=0000:00000000
I/O Map Base = 0068 I/O map Size =2000
Port
Handler
Trapped
Owner
0000
C00C3E92
Yes
VDMAD(01)+17BA
0001
C00C3F0E
Yes
VDMAD(01)+1836
0002
C00C3E92
Yes
VDMAD(01)+17BA
0003
C00C3F0E
Yes
VDMAD(01)+1836
0004
C00C3E92
Yes
VDMAD(01)+17BA
0005
C00C3F0E
Yes
VDMAD(01)+1836
0006
C00C3E92
Yes
VDMAD(01)+17BA
0007
C00C3F0E
Yes
VDMAD(01)+1836
0008
C00C3C55
Yes
VDMAD(01)+157D
0009
C00C3D98
Yes
VDMAD(01)+16C0
Jeśli jesteś ciekawy który VxD hookuje port 21h (rejestr maski przerwań), spójrz na maskę bitową
danych wyjściowych TSS wyświetlaną dla odpowiedniego portu. Poniższe dane wyjściowe pobrane z
danych wyjściowych polecenia TSS wskazują ,ze ten port jest hookowany przez wirtualne urządzenie
PIC a jego program obsługi jest pod offsetem 800792B4 w płaskim segmencie kodu. Odpowiada to
offsetowi 0AF8h bajtów od początku segmentu kodu VPICD.
0021
800792B4 VPICD+0AF8
TYPES
OS
Windows 9x i rodzina Windows NT
Typ
Polecenie Symbol / Źródło
Definicja
Listuje wszystkie typy w bieżącym kontekście lub listuje wszystkie typy informacji dla określonej
nazwy typu.
Składnia
TYPES [nazwa typu]
nazwa typu
Listuje wszystkie typy informacji dla określanej nazwy typu
Użycie
Jeśli nie określisz nazwy typu, TYPES listuje wszystkie typy w bieżącym kontekście. Jeśli określisz
nazwę typu TYPES wylistuje wszystkie typy informacji dla nazwy typu jaką określiłeś. Jeśli nazwa
typu jaką określiłeś jest strukturą, TYPES rozwija strukturę i listuje zdefiniowane typy dla jej
elementów.
Przykład
Poniższy przykład wyświetla wszystkie typy w bieżącym kontekście. Dane wyjściowe przykładu to
tylko część listingu
TYPES
Size
Type Name
Typedef
0x0004
ABORTPROC
int stdcall (*proc) (void)
0x0004
ACCESS_MASK
unsigned long
0x0004
ACL_INFORAMTION_CLASS int
0x0018
ARRAY_INFO
struct ARRAY_INFO
0x0002
ATOM
unsigned short
0x0048
BALLDATA
struct _BALLDATA
0x0048
_BALLDATA
struct _BALLDATA
0x0020
BEZBUFFER
struct _BEZBUFFER
0x0004
BOOL
int
0x0001
BOOLEAN
unsigned char
0x0010
_BOUNCEDATA
struct _BOUNCEDATA
0x0004
BSTR
unsigned short *
Poniższy przykład wyświetla wszystkie typy informacji dla nazwy typu _bouncedata:
TYPES _bouncedata
Typedef struct _BOUNCEDATA {
public:
void * hBAll1;
void * hBall2;
void * hBall3;
void * hBall4;
};
Zobacz
LOCALS; WL
U
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Wyświetlenie / Zmiana pamięci
Definicja
Disasemblacja instrukcji
Składnia
Dla Windows 3.1
U [adres] | [nazwa symbolu]
Dla Windows 9x i rodzina Windows NT
U [adres [ l długość]]
adres
Segment offset lub selektor offset
nazwa symbolu
Przewija okno Kodu do funkcji jaką określamy
długość
Liczba bajtów instrukcji
Użycie
Polecenie U wyświetla albo kod źródłowy lub zdisasemblowany kod spod określonego adresu. Kod
jest wyświetlany w bieżącym trybie( albo kodu , mieszanym lub źródła) okna Kodu. Źródło jest
wyświetlane tylko jeśli jest dostępne dla określonego adresu .Dla zamiany trybu okna Kodu użyj
polecenia SRC (klawisz F3). Jeśli nie określisz tego adresu plecenie disasembluje spod adresu gdzie
pozostał. Jeśli okno Kodu jest widoczne, instrukcja wyświetlana jest w oknie Kodu, w przeciwnym
razie wyświetlana jest w oknie Poleceń. Okno Poleceń albo wyświetla osiem lini lub jedną mniej niż
długość okna Poleceń. Aby uczynić okno Kodu widocznym, użyj polecenia WC (klawisze Alt- F3)
Dla przesunięcia kursora do okna Kodu użyj polecenia EC (klawisz F6). Jeśli ta instrukcja jest spod
bieżącego CS:EIP, polecenie U wyświetli tą instrukcję używając atrybutu obrazu negatywowego.
Jeśli bieżąca instrukcja CS:EIP jest skokiem względnym, instrukcja zawiera albo ciąg JUMP lub NO
JUMP, wskazując czy lub nie skok będzie wykonany. Jeśli skok będzie wykonany, strzałka wskazuje
czy skok pójdzie w górę lub w dół w oknie Kodu. Jeśli bieżąca instrukcja CS:EIP odnosi się do
komórki pamięci, polecenie U wyświetli zawartość tej komórki pamięci w oknie Rejestrów na dole
pola flag. Jeśli okno Rejestrów nie jest widoczne, ta wartość wyświetli się na końcu lini kodu. Jeśli
punkt przerwania jest ustawiony na wyświetlanej instrukcji, linia kodu jest wyświetlana przy pomocy
atrybutu pogrubienia. Jeśli dowolny adres pamięci wewnątrz instrukcji ma odpowiedni symbol,
symbol ten jest wyświetlany zamiast adresy szesnastkowego. Jeśli instrukcja jest umieszczona pod
kodem symbolu, nazwa symbolu wyświetlana jest powyżej instrukcji.
Aby obejrzeć lub zamknąć rzeczywiste bajty heksadecymalne instrukcji, użyj polecenia CODE.
Dla Windows 9x i rodziny Windows NT
Jeśli określisz długość, SoftICE zdisasembluje instrukcje w oknie Poleceń zamiast w oknie Kodu. Jest
to użyteczne dla techniki odwracania, na przykład, disasemblacja całego podprogramu a potem użyć
funkcji Save SoftICE History SoftICE Loader’a do przechwycenia danych wyjściowych do pliku.
Przykład
Poniższy przykład disasembluje instrukcje poczynając od 10 bajtów szesnastkowo przed aktualnym
adresem
U eip – 10
Poniższy przykład wyświetla źródło w oknie Kodu poczynając od lini numer 121
U .121
Dla Windows 9x i rodziny Windows NT
Poniższe polecenie disasembluje 100h bajtów poczynając od MyProc i wyświetla dane wyjściowe w
oknie Poleceń.
U myproc L100
USB
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla informacje o host kontrolerach USB zainstalowanych w systemie.
Składnia
USB [-dumpregs | -schedule][numer host kontrolera]
-dumpregs
Tworzy szczegółowy listing zawartości rejestrów sterownika kontrolera
-schedule
Wyświetla bieżącą zawartość rozkładu transakcji USB dla określonego
host kontrolera
numer host kontrolera
Numer określonego host kontrolera z listy wygenerowanej przez polecenie
USB bez parametrów
Użycie
Polecenie USB wyświetla informację o host kontrolerach USB zainstalowanych w systemie.
Polecenie USB bez parametrów wyświetli numerowaną listę wykrytych host kontrolerów/.
Przełączniki –dumpregs i –schedule oba wymagają aby użytkownik określił numer host kontrolera z
tej listy. USB –dumpregs [Numer HC] pokaże zawartość rejestrów sterownika dla określonego host
kontrolera, podczas gdy USB –schedule [numer HC] wyświetli bieżącą zawartość rozkładu transakcji
USB dla określonego host kontrolera.
Dane wyjściowe tworzone przez polecenie USB bez parametrów będą zawierać numerowaną listę
kontrolerów USB w systemie, wykryte przez SoftICE. Będzie również wyświetlać który z wybranych
host kontrolerów zastosuje UHCI lub Uniwersalny Interfejs Host Kontrolera; lub OHCI , Otwartego
Interfejsu Host Kontrolera,.(EHCI, obecnie jedyna specyfikacja host kontrolera dla USB 2.0 będzie
obsługiwana w przyszłych wersjach SoftICE). Jaka specyfikacja host kontrolera jest obsługiwana,
będą określały dane wyjściowe przez opcje –dumpregs -schedule. Adres PCI każdego urządzenia
jest również listowany, pozwalając użytkownikowi na łatwiejsze dostęp do większej ilości informacji
o urządzeniu używając polecenia PCI
Przełącznik –dumpregs będzie tworzył szczegółowy listing zawartości rejestrów sterujących
urządzenia. .Rejestry host kontrolera są zdefiniowane przez specyfikację host kontrolera dostosowaną
do urządzenia, więc dane wyjściowe z tego polecenia będą różniły się w zależności od typu HC.
Użytkownik będzie musiał skonsultować specyfikację host kontrolera dla szczegółowego opisu
różnych rejestrów sterujących.
Przełącznik –schedule tworzy listę aktualnie aktywnych wejść w rozkładzie host kontrolera.
Polecenie to również akceptuje przełącznik opisowy (-v), który powoduje wyświetlenie również
wejścia nieaktywne. Dla kontrolerów UHCI, wyświetlany jest rozkład wejść , ale dla kontrolerów
OHCI to polecenie wyświetla tylko wejścia przerwań w tym rozkładzie. Nie są pokazane transakcje
masowe i izochroniczne.
Notka: Jeśli SoftICE jest ustawiony do używania klawiatury USB lub myszy kiedy rozkład polecenia
USB jest wydany, możesz użyć własnego wejścia SoftICE w rozkładzie USB, zamiast Windows. Jest
tak ponieważ SoftICE poprawia rozkład USB kiedy się pojawia, żeby użyć klawiatury i myszy.
Poprawianie wpłynie tylko na urządzenia USB klawiatury i myszy, a nie wszystkie urządzenia USB
w systemie. Jeśli musisz zobaczyć rozkład USB z klawiaturą Windows a wejścia rozkładu myszy
pozostają nie zmienione, powinieneś zablokować obsługę urządzenia wejściowego USB SoftICE
używając tabulatora Troubleshooting w okienku dialogowym DriverStudio Configuration (Settings)
Przykład
To są dane wyjściowe polecenia USB dla określonego systemu
USB
3 USB Host Controllers Found
HC 0: UHCI at PCI Bus
0 Device 1F Function
2
HC1: UHCI at PCI Bus
0 Device 1F Function
4
HC2: OHCI at PCI Bus
4 Device F Function
0
Tu są dane wyjściowe z polecenia –dumpregs pokazane jako kontroler UHCI:
USB
-du 0
USB I/O registers for Host Controller 00:
Universal Host Controller at PCI Bus 00 Device 1F Function 02
USB Command (FF80) = 0081
MaxP; 64Bytes CF:0 SWDBG:0 FGR:0 EGSM:0 GRST:0 HCRST:0 R/
S:Run
USB Status (FF82) = 0001
HCHalted: 0 HCProcError: 0 HostErr:0 ResumeDtct:0 USBErrIntr: 0
USBIntr:1
USB Interrupt Enable (FF84) = 000F
Short Packet: 1 IOC:1 Resume:1 Timeout / CRC: 1
Frame Number (FF86) = 0050
FrameList BasaAddr (FF88) = 02BCE160
Start of Frame Modifier (FF8C) = 40 (12000 clocks / frame)
Port 1 Status/Control (FF90) = 0095
Suspend: Enabled Rst : 0 LowSpd:0 ResumeDtct: 0LineStat: 1
EnabChng; 0 Enab:1 CstatChng:0 Cstat:1
Port2 Status/Control (FF92) = 0080
Suspend: Enabled Rst:0 LowSpd: 0 ResumeDtct: 0 LineStat:0
EnabChng: 0 Enab:0 CstatChng:0 Cstat:0
Legacy Suport = 00003F00
A20PTS: 0 USBPIRQDEn: 1 USBIRQS:1 TBy64W:1 TBy64R:1 TBy60W:1
TBy60R:1
SMIEPTE: 0 PSS: 0 A20PTEn:0 USBSMIEn: 0 64Wen:0 64 Ren:0 60Wen:0
60Ren:0
Tu mamy dane wyjściowe z polecenia –schedule. Przykład ten pokazuje tylko pierwsze kilka wejść;
kompletny rozkłąd USB jest trochędługi
USB -sc 0
USB Transaction Schedule for Host Controller 0:
Universal Host Controller at PCI BUS 0 Device 31 Function 2
USB schedule at 827CE000
-----------------------
Frame 0 at 827CE000
======Queue entry at 02DAF000=======
Horiz Link Ptr: 02BCF3C0 (Queue; 1 T:0)
Vert Link Pyr: 02DAF100 (Queue: 0 T:0)
-------------TD at 02DAF100------------------
Next Entry: 00000000 (Vf: 0 Queue:0 T:1)
SPD:1 C_ERR:3 LS:0 ISO:0 IOC:1 ActLen:800 bytes
Status (Act:1 Stalled: 0 DBErr:0 Babble:0 NAK:1 CRC/Tmout: 0
BitErr:0)
MaxLen:1 dataPID:0 EndPoint: 1 DevAddr; 1 PID: 69
Buffer address: 02F16E70
========END Q==========
Frame 1 at 827CE004
========Queue entry at 02B5E000========
Horiz Link Ptr: 02BCF100 (Queue: 1 T:0)
Vert Link Ptr; 02D26460 (Queue:0 T: 0)
--------------TD at 02D26460-----------------
Next Entry; 02D26380 (Vf:0 Queue: 0 T:0)
SPD: 1 C_ERR:3 LS:1 ISO:0 IOC:0 ActLen : 800 bytes
Statu (Act:1 Stalled:0 DBErr: 0 Babble: 0 NAK:1 CRC/Tmout: 0
BitErr:0)
MaxLen; 4 DataPID:1 EndPoint: 1 DevAddr: 2 PID: 69
Buffer address; 02D26470
VCALL
OS
Windows 3.1,Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla nazwy i adresy wywoływalnych podprogramów VxD
Składnia
VCALL [nazwa częściowa]
nazwa częściowa
Nazwa wywoływalny podprogram VxD lub pierwsze
kilka znaków nazwy. Jeśli więcej niż jedna nazwa
podprogramu pasuje do nazwy częściowej, VCALL
listuje wszystkie podprogramy, które zaczynają się z
określonymi znakami.
Użycie
Polecenie VCALL wyświetla nazwy i adresy podprogramów API VxD Windows. To są usługi
Windows dostarczane przez VxD dla innych VxD’kom. Wszystkie te podprogramy listowane przez
SoftICE są umieszczone w systemie Windows VxD, które są traktowane jako część lini bazowej
jądra Windows .
Wyświetlane adresy nie są poprawne dopóki VxD VMM jest zainicjalizowany. Jeśli X nie jest obecne
w ciągu inicjalizacyjnym SoftICE, SoftICE pojawi się podczas bootowania Windows a VMM nie jest
zainicjalizowany.
Nazwy wszystkich API VxD są statyczne. Tylko nawy funkcji dostarczone w plikach dołączanych w
Windows DDK są dostępne. Te nazwy API nie są wbudowane w końcowy plik wykonywalny VxD.
SoftICE dostarcza nazw API dla następujących VxD:
CONFIGMG
IOS
VCD
VMCPD
VSD
DOSMGR
NDIS
VCOMM
VMD
VTD
DOSNET
PAGEFILE
VCOND
VMM
VWIN32
EBIOS
PAGESWAP
VDD
VMPOLI
VXDLDR
ENABLE
SHELL
VDMAD
VNETBIOS
IFSMGR
V86MMGR
VFBACKUP
VPICD
INT13
VCACHE
VKD
VREDIR
Przykład
Poniższy przykład listuje wszystkie funkcje VxD systemu Windows , jakie zaczynają się od Call.
VCALL call
80006E04
Call_When_VM_Retiurns
80009FD4
Call_Global_Event
80009FF4
Call_VM_Event
8000A018
Call_Priority_VM_Event
8000969C
Call_When_VM_Ints_Enabled
800082C0
Call_When_Not_Critical
8000889F
Call_When_Task_Switched
8000898C
Call_When_Idle
VER
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Różne
Definicja
Wyświetla numer wersji SoftICE
Składnia
VER
Notka: Aby obejrzeć informację rejestracyjną i numer seryjny produktu zajrzyj w SoftICE Loader’ze
do „About SoftICE Loader w menu Help
Przykład
Poniższy przykład wyświetla numer wersji SoftICE i wersję systemu operacyjnego
VER
VM
OS
Windows 3.1,Windows 9x
Typ
Informacja systemowa
Definicja
Wyświetla informację o maszynie wirtualnej
Składnia
VM [-S][VM-ID]
-S
Przełącza do identyfikatora VM poprzez VM-ID
VM-ID
Numer indeksu maszyny wirtualnej. Numery indeksu zaczynają się
od 1. Numer indeksowy 1 jest zawsze związany z VM Systemu Windows,
VM w jakim uruchamiają się aplikacje Windows
Użycie
Jeśli nie określono żadnych parametrów, polecenie VM wyświetli informację o wszystkich
wirtualnych maszynach (VM) w systemie. Jeśli jest określony VM-ID, jest wyświetlona wartość
rejestru VM. Te rejestry są tymi znalezionymi w obszarze rejestrów klienckich bloku kontrolnego
maszyny wirtualnej, wiec przedstawiają wartości ostatnio zachowane w bloku kontrolnym, kiedy był
kontekstowy w VM. Jeśli pojawił się SoftICE podczas wykonywania VM, rejestry są wyświetlane w
oknie Rejestrów SoftICE, nie pokazując w danych wyjściowych polecenia VM, są bieżącymi
rejestrami dla VM. Jednak jeśli jesteś przy pierwszych kilku instrukcjach podprogramu przerwania
gdzie rejestry maszyny wirtualnej będą zapisane do bloku kontrolnego, rejestr CS:IP może być
jedynie poprawnym rejestrem. Pozostałe mogą nie zostać zachowane.
Polecenie wyświetla dwa zbiory rejestrów segmentowych plus rejestry EIP i SP. Rejestry
segmentowe są używane w trybie chronionym i kontekście trybu rzeczywistego VM. Jeśli VM
wykonał się ostatnio w trybie chronionym, najpierw są listowane rejestry trybu chronionego. Jeśli
ostatnio wykonywanym trybem był tryb V86, najpierw są listowane rejestry segmentowe
V86Rejestry ogólnego przeznaczenia, wyświetlone poniżej rejestrów segmentowych, odpowiadają
rejestrom segmentowym wylistowanym najpierw.
VM jest jednostką szeregowania jądra Windows. VM może mieć jeden wątek trybu chronionego pod
Windows 3.1 i wiele wątków trybu chronionego pod Windows 9x. W obu przypadkach, VM ma jeden
wątek wykonywalny V86. Windows, aplikacje Windows i DLL’e, wszystkie działają w wątkach
trybu chronionego VM1 (VM Systemowy).
VM inny niż VM Systemowy zazwyczaj ma tylko wątek wykonania V86. Jednak aplikacje DPMI
(znane również jako rozszerzone aplikacje DOS) uruchamiające się z tego VM mogą również
wykonać się w wątku trybu chronionego.
Polecenie VM jest bardzo użyteczne dla debuggowania VxD’ków, programów DPMI, i programów
DOS uruchamianych pod Windows. Na przykład, jeśli system zawiesi się podczas uruchamiania
programu DOS, często możesz użyć polecenia VM dla znalezienia adresu ostatnio wykonywanej
instrukcji. Ostatnia instrukcja to będzie CS:EIP pokazana dla wątku V86 VM.
Polecenie VM może być również cenne kiedy zakłócenia Windows powodują powrót do DOS. To
znaczy kiedy Windows nie może obsłużyć błędu, zamyka się i komputer otwiera się w trybie DOS. W
tym przypadku, I1HERE On jest ustawione w SoftICE i duplikuje problem aby Windows wykonał
INT 1 przed wróceniem do DOS. Kiedy wydarzy się błąd, pojawi się SoftICE, Możesz potem użyć
polecenia VM do stwierdzenia ostatniego adresu wykonanego a polecenia CR dla znalezienia adresu
błędu. CR2 zawiera ten adres błędu. Rejestr ESI zazwyczaj wskazuje na komunikat błędu w tym
miejscu.
Dane wyjściowe Dla każdej maszyny wirtualnej, VM wyświetla następującą informację
VM Handle
Uchwyt VM jest w rzeczywistości płaskim offsetem struktury
danych, która przechowuje informacje o VM
Status
Jest to maska bitowa, która pokazuje bieżący stan informacji dla
VxD. Wartości są następujące:
0001H Tryb zastrzeżony
0002H Uruchomienie w tle
0004H Tworzenie wewnątrz procesowe
0008H Zawieszony
0010H Usuwany częściowo
0020H Wykonywanie kodu trybu chronionego
0040H Wykonywanie aplikacji trybu chronionego
0080H Wykonywanie 32 bitowych chronionych aplikacji
0100H Wykonanie wywołania z VxD
0200H Wysoki priorytet tła
0400H Blokowanie na semaforze
0800H Wzbudzenie po blokowaniu
1000H Część aplikacji V86 jest stronicowana
2000H Reszta V86 jest blokowana
4000H Planowane przez odcinek czasu
8000H Bezczynny zwolnienie odcinka czasu
High Address
Alternatywna przestrzeń adresowa dla VM. Gdzie VxD zazwyczaj
ma dostęp do pamięci VM (zamiast 0). Notka: Jest podobnie jak
część VM będzie stronicowana kiedy pojawia się SoftICE
VM-ID
Numer indeksu tego VxD, zaczynając od 1
Client Registres
Adres zapisanych rejestrów tego VM. Adres ten w rzeczywistości
wskazuje na stos poziomu 0 dla tego VM
Przykład
Poniższy przykład pokazuje zastosowanie polecenia VM bez parametrów
VM
VM Handle
Status
High Addr
VM-ID
Client Regs
806A1000
00004000
81800000
3
806A8F94
8061A000
00000008
81400000
2
80515F94
80461000
00007060
81000000
1
80013390
VXD
OS
Windows 3.1
Typ
Informacja systemowa
Definicja
Wyświetla mapę VxD Windows
Składnia
VXD[ nazwa VxD | częściowa nazwa VxD]
nazwa VxD
Nazwa sterownika urządzenia wirtualnego
częściowa nazwa VxD
Pierwsze kilka znaków nazwy
Użycie
Polecenie to wyświetla mapę wszystkich sterowników urządzeń wirtualnych Windows w oknie
Poleceń. Jeśli nie został określony żaden parametr, wszystkie VxD są wyświetlane. Jeśli jest
określona nazwa VxD, wyświetlana jest tylko informacja o VxD o tej nazwie. Jeśli jest określona
częściowa nazwa, SoftICE wyświetli informacje o wszystkich VxD’kach , których nazwy zaczynają
się tą częściową nazwą.
Informacja która jest pokazana o VxD obejmuje adresy procedur kontrolnych VxD, adresu API V86 i
jego Tryb Chroniony, oraz adresy wszystkich zaimplementowanych usług VxD. Jeśli bieżący CS:EIP
należy do jednego z VxD tej mapy, linia z zakresem adresu, która zawiera ten CS:EIP będzie
podświetlona.
Dane wyjściowe Jeśli nie określono żadnego parametru, każde wejście w mapie VxD zawiera następujące informacje:
VxD name
Nazwa określona w pliku .DEF kiedy budowano VxD
address
Płaski 32 bitowy adres jednej z sekcji VxD. VxD’ki składają się z wielu
sekcji gdzie każda sekcja zawiera zarówno kod jak i dane(np. LockCode,
LockData będą jedną sekcją)
size
Długość sekcji VxD. Obejmuje to zarówno kod i dane grupy VxD
code selector
Płaski selektor kodu
data selector
Płaski selektor danych
type
Numer sekcji z pliku .386
id
Numer ID VxD. Te numery ID VxD są użyteczne przy uzyskiwaniu Trybu
Chronionego i adresów API V86, które wywołują aplikacje
DDB
Adres Bloku Deskryptora Urządzenia VxD (DDB). Jest to blok kontrolny
zawierający informację o VxD takie jak adres Procedury Sterującej i
adresach API
Jeśli jest określona nazwa VxD, wyświetlana jest poniższa informacja dodatkowo do poprzedniej
Informacji:
Control Procedure
Podprogram do którego są wysyłane wszystkie komunikaty VxD
Protected Mode API
Adres tego podprogramu gdzie są przetwarzane wszystkie usługi
wywoływane przez aplikacje trybu chronionego
V86 API Address
Adres podprogramu gdzie są przetwarzane wszystkie usługi wywoływane
przez aplikacje V86
VxD Services
Lista wszystkich usług VxD, które są wywoływalne z innych VxD’ków.
Dla VxD’ków systemu Windows, zarówno nazwa jak i adres podprogramu
są wyświetlane.
Przykład
Poniższy przykład wyświetla mapę VxD w oknie Poleceń . Pierwsze kilka lini może wyglądać
podobnie do poniższych. Możesz użyć nazw VxD w tablicy jako nazwy symboliczne. Adres seg 1
będzie użyty kiedy nazwa VxD jest użyta w wyrażeniu
VXD
VxDName
Address
Length
Code
Data
Type
ID
DDB
VMM
80001000
000183D0
0028
0030
LGRP 01
VMM
80200000
00002F1C
0028
0030
IGRP
LoadHi
8001A3D0
000007E8
0028
0030
LGRP 02
LoadHi
80202F1C
00000788
0028
0030
IGRP
WINICE
8001ABB8
00027875
0028
0039
LGRP
CV1
80042430
0000036B
0028
0030
LGRP
VDDVGA
800429\79C
00007AD8
0028
0030
LGRP
VDDVGA
802036A8
000005EC
0028
0030
IGRP
VXD
OS
Windows 9x
Typ
Informacja systemowa
Definicja
Wyświetla mapę VxD Windows
Składnia
VXD
[nazwa VxD ]
nazwa VxD
Nazwa lub częściowa nazwa jednego lub więcej sterownika urządzenia
wirtualnego.
Użycie
Użyj tego polecenia do uzyskania informacji o jednym lub więcej VxD’ku. Jeśli nie określisz
żadnego parametru, wyświetli mapę wszystkich sterowników urządzeń wirtualnych Windows, które
są aktualnie załadowane w systemie. Dynamicznie ładowane VxD’ki są listowane po statycznie
ładowanych VxD’kach. Jeśli jest określona nazwa VxD, tylko ten VxD, lub VxD’ki o tym samym
ciągu na początku ich nazw są wyświetlone. NA przykład, VM dopasowuje VMM i VMOUSE. Jeśli
bieżący CS:EIP należy do jednego z VxD w mapie, linia z zakresem adresu, która zwiera CS:EIP jest
podświetlona. Jeśli żaden parametr nie został określony, każde wejście w mapie VxD zawiera tą
informację:
VxDName
Nazwa VxD
Address
Adres bazowy segmentu
Length
Długość segmentu
Seg
Numer sekcji wykonywalnej
ID
ID VxD
DDB
Adres bloku deskryptora VxD
Control
Adres programu sterowania wysyłaniem
PM
Y jeśli VxD ma API trybu chronionego, N w przeciwnym razie
V86
Y jeśli VxD ma API V86, N w przeciwnym razie
VXD
Numer zaimplementowanej usługi VxD
Win32
Nu er zaimplementowanej usługi Win32
Jeśli jest określona unikalna nazwa VxD, są wyświetlone dodatkowe informacje:
Init Order
Porządek w jakim VxD odbierają komunikaty sterujące. Wartość zero
wskazuje najwyższy priorytet
Reference Data
Wartość dwusłowa jak jest przekazana z procedury inicjalizującej trybu
rzeczywistego (jeśli jest) tego VxD
Version
Numer wersji VxD
PM API
Adres procedury PM API FLAT a adres PM API Ring-3 używane przez
aplikację. Odnosi się do poniższych komentarzy w PM i API V86.
V86 API
Adres procedury i adres V86 API Ring-3 używane przez aplikację. Odnosi
się do kolejnego komentarza w PM i API V86
Parametry API PM i API V86 są rejestrami bazowymi do pojedynczego VxD definiując podfunkcje i
przekazywanie parametrów (na wejściu EBX-VM Handle, EBP – rejestry klienckie). Jeśli adres Ring-
3 oznacza to ,że jeszcze żaden kod aplikacji nie zażądał adresu API poprzez funkcję 1684h INT 2F.
Kiedy zostanie wylistowany VxD ma tablicę usług Win32, poniższe informacje są prezentowane
dla każdej usługi:
Service Number
Numer usługi Win32
Service Address
Adres programu usługi API
Params
Numer parametrów dword żądanej usługi
Kiedy wylistowany VxD ma tablicę usług VxD, dla każdej usługi jest pokazana taka informacja:
Service Number
Numer usługi VxD
Service Address
Płaski adres usługi
Service Name
Nazwa symbolu (z listy VCALL)
Przykład
Poniższy przykład wyświetla mapę VxD w oknie Poleceń. Pierwsze kilka lini wygląda podobnie do
poniższych. Możesz użyć VxD jako nazw symboli. Adres Seg1 jest użyty kiedy nazwa VxD jest
użyta w wyrażeniu
VXD
VxD Address
Length Seg ID
DDB
Control
PM
V86
Vxd
Win32
Name
VMM C0001000
00FDC0 0001 0001
C000E990 C00024F8 Y
Y
402
41
VMM C0200000
000897 0002
VMM C03E0000
000723 0003
VMM C0320000
000095 0004
VMM C0360000
00ED50 0005
VMM C0260000
007938 0006
WATCH
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Nadzór
Definicja
Dodaje wyrażenie nadzoru
Składnia
WATH wyrażenie
Użycie
Użyj polecenia WATCH do wyświetlenia wyniku wyrażenia. SoftICE określa rozmiar tego wyniku w
oparciu o typ informacji wyrażenia. Jeśli SoftICE nie może określić rozmiaru, zakładany jest dword.
Wyrażenie będące nadzorowanym jest wyświetlane w oknie Watch. Może tam być do ośmiu wyrażeń
w jednym czasie. Za każdym razem kiedy pojawia się ekran SoftICE, okno Watch wyświetla
bieżącą wartość wyrażenia.
Każda linia w oknie Watch zawiera następujące informacje:
*Wyrażenie będące wyliczanym
*Typ wyrażenia
*Bieżącą wartość wyrażenia wyświetlaną we właściwym formacie.
Znak plus (+) poprzedzający typ wskazuje, że możesz rozwinąć go aby zobaczyć więcej informacji.
Dla rozwinięcia typu albo kliknij dwukrotnie typ lub naciśnij Alt-W dla otwarcia okna Windows, użyj
strzałki w dół lub w górę do przesunięcia podświetlonego paska na typ jaki chcesz rozwinąć i naciśnij
Enter.
Jeśli wyrażenie nadzorowane wychodzi poza zakres, SoftICE wyświetli następujący komunikat
:”Error evaluating expression”
Dla usunięcia nadzoru, użyj albo myszki albo klawiatury dla wybrania nadzoru i naciśnięcia Delete.
Przykład
Poniższy przykład tworzy wejście w oknie Watch dla zmiennej hInstance
WATCH hInstance
Poniższy przykład wskazuje, ze typ dla hInstance jest wskaźnikiem void (void *) a jego aktualna
wartość to 0x00400000
hPrevInstance void * = 0x00400000
poniższy przykład wyświetla dword na który wskazują rejestry DS.:ESI
WATCH ds.:esi
ds:esi void * = 0x8158D72E
Dla nadzoru nad tym co wskazuje ds.:esi użyj operatora wskaźnika (*):
WATCH * ds.:esi
Poniższy przykład ustawia nadzór nad wskaźnikiem do ciągu znaków lpszCmdLine. Wynik pokazuje
wartość wskaźnika (0x8158D72E) i ciąg ASCII (aktualnie pusty)
WATCH lpszCmdLine +char * = 0x8158D72E <””>
Podwójne kwiknięcie na tej lini rozszerza ją i pokazuje aktualną zawartość ciągu
lpszCmdLine – char 8 =0x8159D72E
char =0x0
Zobacz
Alt-W; WW
WC
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterownie oknem
Klawisz
Alt – F3
Definicja
Przełącza otwarcie , zamknięcie okna Kodu; ustawia rozmiar okna Kodu
Składnia
WC [+ | -] [rozmiar okna
+ / -
Opcjonalny przełącznik zwiększa lub zmniejszania rozmiaru okna przez
liczbę dziesiętną do której odnosimy się w rozmiarze okna
rozmiar okna
Liczba dziesiętna
Użycie
Jeśli nie określisz rozmiaru okna, WC otworzy lub zamknie okno. Jeśli okno Kodu jest zamknięte,
WC je otworzy; jeśli jest otwarte, WC je zamknie. Jeśli określisz rozmiar okna, okno Kodu zmienia
rozmiar. Jeśli jest zamknięte, WC je otworzy w określonym rozmiarze. Kiedy okno Kodu jest
zamykane, są dodawane dodatkowe linie do okna Poleceń. Kiedy okno Kodu jest otwierane linie te są
pobierane z innych okien w następującym porządku: Poleceń i Danych. Jeśli życzysz sobie przesunąć
kursor do okna Kodu użyj polecenia EC (klawisz F6)
Przykład
Jeśli okno Kodu jest zamknięte, poniższy przykład wyświetli to okno i ustawi 12 lini. Jeśli oko Kodu
jest otwarte, przykład ustawi go na 12 lini.
WC 12
Poniższy przykład rozszerza 12 lini kodu okna (ustawione w poprzednim przykładzie) do 18 linii.
WC +6
Zobacz
WD;WF;WL’WR;WS;WT;WW;WX
WD
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
Alt-F12
Definicja
Przełącza okno Danych n na otwarcie lub zamknięcie i opcjonalnie ustawia rozmiar okna Danych n
Składnia
WD[.0 | .1 | .2 | .3][+ | -] [rozmiar okna]
.0 / .1 / .2 /.3
Opcjonalne przełączniki do identyfikacji numeru okna Danych
+ / -
Opcjonalne przełączniki zwiększające lub zmniejszające rozmiar
okna przez liczbę dziesiętną do której odnosimy się w rozmiarze
okna
rozmiar okna
Liczba dziesiętna
Użycie
Jeśli nie określisz rozmiaru okna lub numeru okna Danych, plecenie WD przełączy okno Danych 0
(domyślne okno Danych) do otwarcia lub zamknięcia. Jeśli okno Danych o jest zamknięte, WD
otworzy je a jeśli jest otwarte WD je zamknie. Jeśli określisz numer okna i rozmiar okna, okno
danych n zmienia rozmiar. Jeśli jest zamknięte, polecenie otwiera je do określonego rozmiaru.
Kiedy okno Danych jest zamknięte, dodatkowe linie ekranu z okna Danych są dodawane do okna
Poleceń. Kiedy okno Danych jest otwarte, linie są pobierane z innych okien w następującym
porządku: Poleceń i Kodu
Jeśli życzysz sobie przesunąć kursor do okna Danych dla edycji danych użyj polecenia E
Przykład
Jeśli okno Danych 2 jest zamknięte, poniższy przykład wyświetli to okno i ustawi go na 12 lini. Jeśli
okno Danych 2 jest otwarte, przykład ustawi go na 12 lini
WD .2 12
Poniższy przykład rozszerza dwanaście lini okna Danych 2 (ustawionego w poprzednim przykładzie)
do 18 lini.
WD .2 +6
Zobacz
WC;WF;WL;WR;WS;WT;WW;WX
WF
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
CTRL – F3
Definicja
Wyświetla stos zmienno przecinkowy albo w formacie zmienno przecinkowym albo formacie MMX
Składnia
WF [-d] [b | w | d | f | p | *]
-d
Wyświetla stos zmienno przecinkowy w oknie Poleceń. Poza rejestrami
zarówno słowo statusu FPU jaki i Słowo sterujące FPU są wyświetlone w
postaci ASCII
b
Wyświetla stos zmienno przecinkowy w formacie bajtów szesnastkowych
w
Wyświetla stos zmienno przecinkowy w formacie słów szesnastkowych
d
Wyświetla stos zmienno przecinkowy w formacie dwusłów
szesnastkowych
f
Wyświetla stos zmienno przecinkowy w formacie liczb rzeczywistych 10
bajtowych
p
Wyświetla stos zmienno przecinkowy jako 32 bitowy pakiet zmienno
przecinkowy. Jest to format AMD 3Dnow
*
Wyświetla „następny” format. Słowo kluczowe „*” pozwala na cykliczne
przechodzenie wszystkich formatów wyświetlania przez naciskanie
klawiszy funkcyjnych.
Użycie
WF bez parametrów przełącza wyświetlanie zmienno przecinkowe okna Rejestrów. Okno zajmuje
cztery linie i jest wyświetlane bezpośrednio poniżej okna Rejestrów . W formacie 10 bajtowych liczb
rzeczywistych. Rejestry są oznaczone jako ST0 – ST7/ We wszystkich innych formatach rejestry są
oznaczone jako MM0-MM7. Jeśli stos zmienno przecinkowy zawiera wyjątki nie zamaskowane.,
SoftICE NIE będzie wyświetlał zawartości stosu. Kiedy odczyta FPS, SoftICE wykona bity znacznika
i wyświetli ‘empty’ jeśli bity znacznika określają taki stan.
Kiedy wyświetlamy w oknie Poleceń. SoftICE wyświetli zarówno słowo statusu jak i słowo kontrolne
w formacie ASCII
Przykład
Poniższy przykład pokazuje użycie polecenia WF z opcją –d ustawioną do pokazania stosu zmienno
przecinkowego i opcją –f ustawiającą wyświetlanie stosu w 10 bajtowym formacie liczb
rzeczywistych
WF -d f
FPU Status Word: top=2
FPU Control Word : PM UM OM ZM DM IM pc =3 rc =0
ST0
1.642423499231473121e-289
ST1
9.93028352523325325e-293
ST2
6.77935453413433220e-296
ST3
4.27454104389213576e-299
ST4
2.82908729023432468e-302
ST5
1.81865208369123042e-302
ST6
empty
ST7
empty
Kiedy wyświetlamy w dowolnym formacie szesnastkowym, SoftICE zawsze wyświetla od lewej do
prawej od bardziej do mniej znaczącego. Na przykład w formacie słowa, będzie następujący
porządek:
bits(63-48) bits(47-32) bits(31-16) bits(15-0)
Zobacz
WC;WD;WL;WR;WS;WT;WW;WX
WHAT
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Określa czy nazwa lub wyrażenie są „znanego” typu
Składnia
WHAT [nazwa | wyrażenie]
nazwa
Dowolna nazwa symboliczna, która nie może być wyliczona jako
wyrażenie
wyrażenie
Dowolne wyrażenie, które może być interpretowane jako wyrażenie
Użycie
Polecenie WHAT analizuje określony parametr i porównuje go do znanej nazwy / wartości
wyliczając każde możliwe dopasowanie, dopóki nie znajdzie więcej dopasowań . Gdzie odpowiednia
identyfikacja typu dopasowania jest rozwinięta dla wskazania odpowiedniej informacji takiej jak
powiązany proces lub wątek. Parametr nazwa jest zazwyczaj zbirem znaków alfanumerycznych ,
które przedstawiają nazwę obiektu. Na przykład, „Explorer” byłby interpretowany jako nawa, i może
być identyfikowany jako moduł albo proces albo obydwa.
Parametr wyrażenie jest czymś co generalnie nie będzie rozpatrywane jako nazwa. To znaczy jest to
liczba, złożone wyrażenie (wyrażenie które zawiera operatory, takie jak Explorer +0) lub nazwa
rejestru .Chociaż rejestr wygląda jak nazwa, rejestry są specjalnymi przypadkami wyrażeń ponieważ
to zastosowanie jest dużo bardziej powszechne. Na przykład, dla WHAT eax, parametr eax jest
interpretowany jak typ wyrażenia. Nazwa symbolu jest traktowana jako nazwa i będzie poprawnie
zidentyfikowana przez polecenie WHAT jako symbole. Ponieważ zasady określania typów nazw i
wyrażeń mogą być niejasne możesz wymusić parametr będący wyliczanym jako nazwę typu przez
umieszczenie go w cudzysłowie. Na przykład WHAT „eax”, cudzysłowy wymuszają aby eax był
interpretowany jako nazwa typu. Dal wymuszenia aby parametr mógł być interpretowany od nazwy
typu do typu wyrażenia użyj jednoargumentowego operatora „+”. Na przykład WHAT +Explorer,
poprzedzenie jednoargumentowym operatorem, „+” wymusza to aby Explorer był interpretowany
jako symbol zamiast nazwy
Przykład
Poniżej jest przykład użycia polecenia WHAT z nazwą Explorer i wynikowymi danymi
wyjściowymi. Z danych wyjściowych wynika, że nazwa Explorer została zidentyfikowana
dwukrotnie; raz jako proces jądra i drugi raz jako moduł
WHAT explorer
The name (explorer) was identified and has the value FD854A80
The value (FD854A80) is a Kernel Process (KPEB) for Explorer (58)
The name (explorer) was identified and has the value 10000000
The value (10000000) js a Module Image Base for ‘Explorer’
WIDTH
OS
Windows 9x i rodzina Windows NT
Typ
Ustawienia użytkownika
Definicja
Ustawia liczbę wyświetlanych kolumn w oknie SoftICE
Składnia
WIDTH [80 =160]
80-160
Liczba wyświetlanych kolumn
Użycie
Kiedy używasz SoftICE z Uniwersalnym Sterownikiem Video możesz użyć polecenia WIDTH do
ustawienia liczby wyświetlanych kolumn pomiędzy 80 a 160. Domyślnie jest to 80
Jeśli wpiszesz polecenie WIDTH bez określania parametrów, SoftICE wyświetli bieżące ustawienia
szerokości okna
Przykład
Poniższy przykład ustawia szerokość okna SoftICE na 90 wyświetlanych kolumn
WIDTH 90
Poniższe polecenie zwraca bieżącą szerokość ustawienia okna SoftICE
WIDTH
Zobacz
LINES; SET
WINERROR
OS
Rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla zdefiniowane nagłówki mnemoników dla kodów błędów Win32
Składnia
WINERROR kod
kod
Kod błędu Win32 jaki chcesz zwrócić dla mnemonika
Użycie
Polecenie WINERROR wyświetla zdefiniowane nagłówki mnemoników powiązane z określonym
kodem błędu Win32/64. Polecenie to pozwala ci zwrócić bardziej intuicyjnie mnemoniki powiązane z
kodem błędu Win32
Przykład
Poniższy przykład pokazuje polecenie WINERROR zwracające mnemonik dla kodu błędu 0x103
WINERROR 0x103
ERROR_NO_MORE_ITEMS
WL
OS
Windows 9x i rodzina Windows NT
Typ
Polecenie sterowania oknem
Definicja
Przełącza okno Locals na otwarte lub zamknięte; ustawia rozmiar okna Locals
Składnia
WL [+ | -] [rozmiar okna
+/ -
Opcjonalne
przełączniki do zwiększenia lub zmniejszenia rozmiaru okna
poprzez cyfrę dziesiętną odnosząc się do rozmiaru okna
rozmiar okna
Liczba dziesiętna
Użycie
Jeśli nie określisz rozmiaru okna, WL przełącza okno Locals na otwieranie lub zamykanie. Jeśli okno
Locals jest zamknięte, WL otwiera go; a jeśli jest otwarte, WL zamyka go.
Jeśli określisz rozmiar okna, okno Locals zmienia rozmiar. Jeśli jest zamknięte ,WL otwiera go z
określonym rozmiarem.
Kiedy okno Locals jest zamknięte, dodatkowe linie ekranu są dodane do okna Poleceń. Kiedy okno
Locals jest otwierane, linie są pobierane z innych okien w następującym porządku : Poleceń i Kodu.
Notka: z wnętrza okna Locals możesz rozwinąć struktury, tablice i ciągi znaków dla wyświetlenia ich
zawartości. Po prostu kliknij dwa razy pozycję jaką chcesz rozwinąć .Pozycje rozwijalne są
wskazywane znakiem plus (+)
Przykład
Jeśli okno Locals jest zamknięte, poniższy przykład wyświetli okno i ustawi go na 12 lini. Jeśli okno
Locals jest otwarte, przykład ustawi 12 lini
WL 12
Poniższy przykład rozwija 12 lini kodu okna (ustawione w poprzednim przykładzie ) do 18 lini
WL + 6
Zobacz
LOCALS; TYPES; WC; WD;WF;WR;WS;WT;WW;WX
WMSG
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla nazwy i numery komunikatów, komunikatów Windows
Składnia
Dla Windows 3.1
WMSG [nazwa częściowa]
Dla Windows 9x i rodziny Windows NT
WMSG [nazwa częściowa { numer komunikatu]
nazwa częściowa
nazwa komunikatu Windows lub pierwsze kilka znaków nazwy
komunikatu Windows. Jeśli wiele komunikatów Windows pasuje do nazwy
częściowej, wtedy są wyświetlane wszystkie komunikaty, które zaczynają
się określonymi znakami
numer komunikatu
Szesnastkowy numer komunikatu . Tylko ten komunikat, który pasuje do
wyświetlanego numeru komunikatu
Użycie
Polecenie to wyświetla nazwy i numery komunikatów komunikatów Windows. Jest to użyteczne
kiedy logujemy lub ustawiamy punkt przerwania na komunikacie Windows poleceniem BMSG
Przykład
Poniższy przykład wyświetla nazwy i numery komunikatów wszystkich komunikatów Windows które
zaczynają się od „WM_GET”
WMSG wm_get*
000D
WM_GETTEXT
000E
WM_GETTEXTLENGTH
0024
WM_GETMINMAXINFO
0031
WM_GETFONT
0087
WM_GETDLGCODE
Poniższy przykład wyświetla komunikat Windows , który ma określony numer 111
WMSG 111
0111 WM_Command
WR
OS
Windows 3.1, Windows 9x i rodzina Windows NT
Typ
Sterownie oknem
Klawisz
F2
Definicja
Przełącza okno Rejestrów
Składnia
WR
Użycie
Polecenie WR czyni widocznym okno Rejestrów jeśli nie jest aktualnie widoczne. Jeśli okno to jest
aktualnie widoczne, WR zamyka okno Rejestrów. Okno Rejestrów wyświetla zbór rejestrów 80386 i
flag procesora. Kiedy okno Rejestrów jest zamknięte, dodatkowe linie ekranu są dodawane do okna
Poleceń. Kiedy okno to jest widoczne, linie są pobierane z innych okien w następującej kolejności:
Pleceń, Kodu i Danych
Dla Windows 9x i rodziny Windows NT
Polecenie WR również przełącza widzialność okna Rejestrów zmienno przecinkowych jeśli jest
otwarte.
Zobacz
WC;WD;WF;WL;WS;WT;WW;WX
WS
OS
Windows 9x i rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
Alt – S
Definicja
Przełącza otwieranie i zamykanie okna stosu wywołań, i ustawia rozmiar stosu okna
Składnia
WS [+ | -] [rozmiar okna]
+ / -
Opcjonalny przełącznik zwiększania lub zmniejszania rozmiaru okna przez cyfrę
dziesiętną do której się odnosimy w rozmiarze okna
rozmiar okna
Liczba lini w oknie SoftICE powiązana z oknem stosu wywołań
Użycie
Możesz użyć klawiszy strzałek do wybrania określonego elementu stosu wywołań .Kiedy wybierzesz
pozycję stosu wywołań i naciśniesz Enter , SoftICE uaktualni okna Locals i Kod pokazując wybrany
poziom stosu. Możesz również kliknąć myszką na oknie Stosu , kliknij raz pozycję do zaznaczenia i
podwójnie kliknij na pozycji do aktualizacji okien Locals i Kodu
Przykład
Poniższe polecenie otwiera okno stosu wywołań, jeśli jest zamknięte i ustawia jego rozmiar na 12 lini
WS 12
Poniższy przykład rozwija dwanaście lini kodu okna (ustawionego w poprzednim przykładzie) do 18
lini
WS +6
Zobacz
WC;WD;WF;WL;WR;WT;WW;WX
WT
OS
Windows 9x
Typ
Sterowanie oknem
Klawisz
Alt – T
Definicja
Przełącza otwieranie i zamykanie okna Wątków; ustawia rozmiar okna Wątków
Składnia
WT [+ | -][rozmiar okna]
+ / -
Opcjonalny przełącznik do zwiększania lub zmniejszania rozmiaru okna przez
liczbę dziesiętną odnosząc się do rozmiaru okna
rozmiar okna
Liczba dziesiętna
Użycie
Jeśli nie określisz rozmiaru okna, WT przełącza otwarcie okna lub zamknięcie. Jeśli okno Wątków
jest zamknięte, WT otwiera gol; jeśli jest otwarte WT zamyka go.
Jeśli określisz rozmiar okna , okno Wątków zmienia rozmiar. Jeśli jest zamknięte WT otwiera w
określonym rozmiarze .Polecenie WT wyświetla informacje o wątkach dla danego procesu. Poprzez
użycie polecenia ADDR możesz przełączać się do różnych kontekstów procesów (tym samym
przełączanie widzialnych wątków) Informacje wyświetlane dla każdego wątku jest tak samo
wyświetlane przez polecenie Thread. Jeśli życzysz sobie przesunąć kursor do okna Wątków, użyj
sekwencji Alt – T
Przykład
Jeśli okno Wątków jest zamknięte, poniższy przykład wyświetla to okno i ustawia go na dwanaście
linii. Jeśli okno Wątków jest otwarte, przykład ten ustawia go na 12 lini
WT 12
Poniższy przykład rozwija 12 lini kodu okna (ustawionego w poprzednim przykładzie) do
osiemnastu lini.
WT +6
Zobacz
WC;WD;WF;WL;WR;WS;WX;THRAED(9x)
WT
OS
Rodzina Windows NT
Typ
Sterowanie oknem
Klawisz
Alt – T
Definicja
Przełącza otwieranie i zamykanie okna Wątków; ustawia rozmiar okna Wątków
Składnia
WT [rozmiar okna][+ | -][rozmiar okna]
+ / -
Opcjonalny przełącznik do zwiększania lub zmniejszania rozmiaru okna przez
liczbę dziesiętną do której odnosimy się przez rozmiar okna
rozmiar okna
Liczba dziesiętna
Użycie
Jeśli nie określisz rozmiaru okna, WT przełącza otwieranie i zamykanie okna. Jeśli okno Wątków jest
zamknięte, WT otwiera go; jeśli jest otwarte, WT zamyka go. Jeśli określisz rozmiar, okno Wątków
zmienia rozmiar. Jeśli jest zamknięte, WT otwiera go w określonym rozmiarze.
Polecenie WT wyświetla informacje o wątkach dla danego procesu. Poprzez użycie polecenia ADDR
możesz przełączać się do różnych kontekstów procesów (tym samym przełączanie widzialnych
wątków) Informacje wyświetlane dla każdego wątku obejmują ID, KTEB, UTEB, stanu, procesu (ID
#) i atrybutów. Informacja dla atrybutów może być dowolnym połączeniem:
*
Identyfikacja bieżąco wykonywanego wątku
NP.
Oznacza ,że ramka wątku była stronicowana (np. Nie Obecny)
S
oznacza ,że określone wejście jest wybrane a okna Kodu, Stosu i Locals odnoszą
się do tego wątku
Jeśli życzysz sobie przesunąć kursor do okna Wątku, użyj sekwencji Alt – T. Dla nawigacji po oknie
Wątków i wybraniu jednego z wątków, okna Stosu, Kodu i Locals będą aktualizowane
odzwierciedlając wątek jaki został wybrany. Jeśli wybrana ramka wątku jest stronicowana, okna
Stosu ,Kodu i Locals będą domyślnie bieżącym wykonywanym wątkiem.
Przykład
Jeśli okno Wątków jest zamknięte,. Poniższy przykład wyświetli okno i ustawi go na 12 lini. Jeśli
okno Wątków jest otwarte, przykład ten ustawi go na 12 lini.
WT 12
Poniższy przykład rozwija 12 lini kodu okna (ustawionego w poprzednim przykładzie) do 18 lini
WT +6
Zobacz
WC;WD;WF;WL;WR;WS;WX;THREAD(NT)
WW
OS
Windows3.1, Windows 9x i rodzina Windows NT
Typ
Sterownie oknem
Klawisz
Alt – F4
Definicja
Przełącza otwieranie i zamykanie okna Watch, ustawia rozmiar okna Watch
Składnia
WW [rozmiar okna][+ | -][rozmiar okna]
+ / -
Opcjonalny przełącznik do zwiększania lub zmniejszania rozmiaru okna przez
liczbę dziesiętną do której odnosimy się przez rozmiar okna
rozmiar okna
Liczba dziesiętna
Użycie
Jeśli nie określisz rozmiaru okna, WW przełącza otwarcie lub zamknięcie okna Watch. Jeśli okno
Watch jest zamknięte, WW otwiera gol; jeśli jest otwarte WW zamyka go.
Jeśli określisz rozmiar okna , okno Watch zmienia rozmiar. Jeśli jest zamknięte WW otwiera w
określonym rozmiarze .Kiedy okno Watch jest zamknięte , dodatkowe linie ekranu są dodawane do
okna Poleceń . Kiedy okno Watch jest otwarte, linie są pobierane z innych okien w następującym
porządku: Poleceń, Kodu i Danych.
Przykład
Jeśli okno Watch jest zamknięte, poniższy przykład wyświetli okno i ustawi go na 12 lini. Jeśli okno
Watch jest otwarte, ten przykład ustawi go na 12 lini.
WW 12
Poniższy przykład rozwija 12 lini kodu okna (ustawione w poprzednim przykładzie) do 18 lini
WW +6
Zobacz
WC;WD;WF;WL;WR;WS;WT;WX
WX
OS
Rodzina Windows NT
Typ
Sterownie oknem
Definicja
Przełącza rejestr okna XMM do otwarcia i zamknięcia; ustawia format wyświetlania okna
Składnia
WX [SF/DF | D/Q/DQ / *]
SF
Wartość rzeczywista ze znakiem
DF
Podwójna wartość rzeczywista
D
Wyświetla 32 bitową wartość dwusłowa
Q
Wyświetla 64 bitową wartość poczwórnego słowa
DQ
Wyświetla 128 bitową wartość podwójnego poczwórnego słowa
*
Zmienia kolejny format
Użycie
Na komputerach używających CPU Pentium III, możesz użyć polecenia WX do wyświetlenia okna
,które zawiera wartość rejestrów XMM, odXMM0 do Xmm7. Jeśli użyjesz opcji SF, wartości rejestru
są wyświetlane jako wartość rzeczywista ze znakiem. Jeśli użyjesz opcji DF, wartości rejestrów są
wyświetlane jako podwójne wartości rzeczywiste. Jeśli użyjesz opcji D wartości te są wyświetlane
jako 32 bitowe dwusłowa. Jeśli użyjesz opcji Q wartości są wyświetlane jako 64 bitowe poczwórne
słowa. Jeśli użyjesz opcji DQ wartości są wyświetlane jako 128 podwójne poczwórne słowa, Możesz
użyć gwiazdki (*) do zmiany do kolejnego formatu
Przykład
Poniższy przykład wyświetla rejestry XMM okna. Wartości są wyświetlane jako dwusłowa
WX d
Zobacz
WC;WD;WF;WL;WR;WS;WT;WW
X
OS
Windows 3.1, Windows 9x i rodziny Windows NT
Typ
Sterowanie przepływem
Klawisz
F5
Definicja
Opuszczanie ekranu SoftICE
Składnia
X
Użycie
Polecenie X wychodzi z SoftICE i przywraca sterownie do programu, który został przerwany prze
SoftICE. Ekran SoftICE znika. Jeśli miałeś ustawiony dowolny punkt przerwania, stają się one
aktywne.
Notka: Przy SoftICE , naciskanie sekwencji klawiszy (domyślnie Ctrl – D) lub wpisanie polecenie G
bez żadnych parametrów jest odpowiednikiem wpisania polecenia X.
XFRAME
OS
Windows 9x i rodzina Windows NT
Typ
Informacja systemowa
Definicja
Wyświetla procedurę obsługi wyjątków ramek, które są aktualnie zainstalowane
Składnia
XFRAME [ ramka wyjątku* | typ wątku]
ramka wyjątku*
Wartość wskaźnika stosu dla ramki wyjątku
typ wątku
Wartość którą SoftICE rozpoznaje jako wątek
Użycie
Ramki wyjątków są tworzone przez Microsoftowy API Strukturalnej Obsługi Wyjątków (SEH).
Programy są tworzone są stosie więc są kontekstowe.
Kiedy jest zainstalowany program obsługi wyjątków, informacja o nim jest zapisana w bieżącej
ramce stosu . Informacja ta odnosi się do ExceptionRegistration. Polecenie XFRAME rozumie tą
informację, i przechodzi przez ramkę stosu dopóki nie osiągnie najwyższego programu obsługi
wyjątków. Stamtąd zaczyna wyświetlanie każdego zarejestrowanego rekordu do aktualnie aktywnego
zakresu. Dla każdej rejestracji określa czy program jest aktywny czy nie aktywny; wiąże „globalny
program obsługi wyjątków”; i jeśli program jest aktywny, typ SEH: try/except lub try / finally. W
przypadku aktywnego programu obsługi wyjątków, wyświetla również filtr wyjątku lub końcowy
adres programu.
Notka: Globalny program obsługi wyjątków jest w rzeczywistości dyspozytorem wyjątku , który
używa informacji wewnątrz tablicy zakresu wyjątku dla określenia który program obsługi wyjątków
obsługuje ten wyjątek. Obsługuje również inne zadania takie jak globalne i lokalne rozwijanie
Możesz użyć globalnego programu obsługi wyjątków i adresów try/except/finally do pułapkowania
wyjątków SEH poprzez ustawianie punktów przerwań na właściwym adresie programu.
Polecenie XFRAME jest kontekstowe, więc jeśli nie określisz jednego opcjonalnego parametru,
SoftICE powróci do kontekstu, który był aktywny w czasie jego pojawienia i wyświetli ramkę
wyjątku dla bieżącego wątku. Kiedy określisz wskaźnik ramki stosu jako parametr opcjonalny,
upewnij się czy jesteś w kontekście w którym ramka wyjątku jest poprawna. Dla parametru typu
wątku, SoftICE automatycznie przełącza do poprawnego kontekstu dla tego wątku. Poniżej tej
informacji dla rekordu ExceptionRegistration, XFRAME listuje każdy aktywny program dla ramki
stosu. Dla każdego aktywnego programu obsługi, XFRAME wyświetla jego typ (try/except lub
try/finally), adres jego filtru wyjątku (tylko dla try/except) i adres programu obsługi wyjątku,.
Ponieważ program obsługi wyjątku może być zagnieżdżony, może być wylistowane więcej niż jedno
wejście dla każdego rekordu ExceptionRegistration.
Polecenie XFRAME wyświetla puste adresy w swoich danych wyjściowych . możesz użyć albo
polecenia STACK lub WHAT dla określenia API, które zainstalowało program obsługi wyjątków
Nie pomyl wartości xScope z poziomem zagnieżdżenia programu obsługi wyjątków. Chociaż
wartości te mogą pojawić się w takiej samej korelacji, wartość xScope jest po prostu indeksem do
tablicy zakresu (xTable). Wejście tablicy zakresu zawiera link do jego zakresu rodzicielskiego (jeśli
jest).
Jeśli zdarzy się ,że nie ma ramki stosu, XFRAME nie będzie mógł do końca przejść przez stos
Dane wyjściowe Dla każdej ramki stosu jaka jest zainstalowana, XFRAME wyświetla następujące informacje:
xFrame
Adres ExceptionRegistration. Wartość ta jest podstawą stosu
xHandler
Adres globalnego programu obsługi wyjątków, który przydziela
wyjątki do właściwych flitrów/programów try/except/finally
xTable
Adres tablicy zakresu używanej przez globalny program obsługi
wyjątków do przydzielania wyjątków
xScope
Indeks do x Table dla aktualnie aktywnego programu obsługi
wyjątków. Jeśli wartość ta to –1, program obsługi wyjątków jest
zainstalowany ale jest nie aktywny i nie będzie wychwytywał
wyjątków
Przykład
Poniższy przykład ilustruje użycie polecenia XFRAME do wyświetlenia informacji o ramkach
programów obsługi wyjątków dla aktualnie aktywnego wątku
XFRAME
xFrame
xHandler xTable
xScope
---------
-----------
---------
----------
0x45FFFDC
0x6063963B
0x606018B8
00
try/except (0000) filter = 0x60606F72,
handler = 0x60606F85
0x45FFFAB
0x5FE16890
0x5FE1121
00
try/except (0000) filter=0x5FE125EB,
handler =0x5FE125F8
0x45FFB74
0x77F8B1BC
0x77F61370
00
try/except (0000) filter = 0x77F7DD21,
handler = 0x77F7DD31
XG
OS
Windows 3.1, Windows 9x
Typ
Symbol/Źródło
Definicja
Idzie pod adres w trybie symulacji śledzenia
Składnia
XG [r] adres
r
Cofnięcie. Idzie wstecz w buforze historii śledzenia wstecznego
Użycie
XG przechodzi pod określony adres kodu wewnątrz bufora historii śledzenia wstecznego. Polecenie
to może być tylko użyte w trybie symulacji śledzenia. Parametr R powoduje ,że XG cofa się
wewnątrz bufora historii śledzenia wstecznego. Jeśli nie znaleziono określonego adresu wewnątrz
bufora historii śledzenia wstecznego, wyświetlany jest błąd
Przykład
Poniższy przykład czyni instrukcję spod adres CS:2FF000h aktualną instrukcja w buforze historii
śledzenia wstecznego
XG 2ff000
XP
OS
Windos3.1, Windows 9x
Typ
Symbol/Źródło
Klawisz
Ctrl –F10
Definicja
Krok programu w trybie symulacji śledzenia
Składnia
XP
Użycie
Polecenie XP robi krok programu bieżącej instrukcji w buforze historii śledzenia wstecznego. Może
być użyte tylko w trybie symulacji śledzenia. Użyj tego polecenia do przeskoczenia wywołania
procedur i ciągów instrukcji rep
Przykład
Poniższy przykład wykonuje krok programu ponad bieżącą instrukcją w buforze historii śledzenia
wstecznego
XP
XRSET
OS
Windows3.1, Windows 9x
Typ
Symbol/Źródło
Definicja
Resetuje bufor historii śledzenia wstecznego
Składnia
XRSET
Użycie
XRSET czyści wszystkie informacje z bufora historii śledzenia wstecznego. Może być użyty tylko
kiedy NIE jest w trybie symulacji śledzenia
Przykład
Poniższy przykład czyści bufor historii śledzenia wstecznego
XRSET
XT
OS
Windows 3.1, Windows 9x
Typ
Plecenie Symbol/Źródło
Klawisz
Ctrl-F8 (XT R: Alt-F8)
Definicja
Praca krokowa w trybie symulacji śledzenia
Składnia
XT [R}
R
Odwrócenie .Krok wstecz w buforze historii Beatrice
Użycie
Użyj polecenia XT do pracy krokowej instrukcji bieżącej w buforze historii śledzenia wstecznego.
Możesz użyć polecenia XT tylko w trybie symulacji śledzenia. Polecenie to kroczy do kolejnej
instrukcji zawartej w buforze historii śledzenia wstecznego. Polecenie XT R pracuje krokowo wstecz
wewnątrz bufora historii śledzenia wstecznego
Przykład
Poniższy przykład pracuje krokowo z jedną instrukcją w przód w buforze historii śledzenia
wstecznego
XT
ZAP
OS
Windows3.1, Windows 0x i rodzina Windows NT
Typ
Polecenia sterowania trybem
Definicja
Zastępuje osadzone przerwania 1 lub 3 instrukcją NOP
Składnia
ZAP
Użycie
Polecenie ZAP zastępuje osadzone przerwania 1 i 3 właściwą liczbą instrukcji NOP. Jest to użyteczne
kiedy INT 1 lub INT 3 są umieszczone w kodzie, który jest wykonywany z powtórzeniem a nie
chcesz aby dłużej pojawiał się SoftICE. Polecenie to działa tylko jeśli instrukcje INT 1 i INT 3 są
instrukcjami przed bieżącym CS:EIP
Przykład
Poniższy przykład zastępuje osadzone przerwanie 1 lub przerwanie 3 instrukcją NOP
ZAP