Polecenia SI doc

background image

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

background image

*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ń

background image

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

background image

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

background image

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

background image

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

background image

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.

background image

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

background image

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ń

background image

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

background image

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

background image

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

background image

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,

background image

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

background image

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

background image

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

background image

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

background image

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ń

background image

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

background image

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”

background image

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

background image

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ł

background image

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.

background image

-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

background image

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

background image

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

background image

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

background image

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.

background image

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

background image

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.

background image

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

background image

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

background image

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

background image

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]

background image

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

background image

*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

background image

-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)

background image

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

background image

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

background image

*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

background image

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

background image

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

background image

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]

background image

*

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.

background image

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:

background image

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

background image

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

background image

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

background image

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:

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

+ (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

background image

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.

background image

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.

background image

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

background image

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]

background image

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

background image

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

background image

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

background image

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

background image

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

background image

&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

background image

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:

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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:

background image

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

background image

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

background image

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

background image

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

background image

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’

background image

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]

background image

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:

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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)

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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
:

background image

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ą ( * ).

background image

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]

background image

-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

background image

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

background image

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)

background image

-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ż

background image

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)

background image

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

background image

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

background image

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ść]

background image

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)’

background image

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.

background image

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

background image

[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

background image

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

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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]

background image

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

background image

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

background image

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

background image

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

background image

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:

background image

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

background image

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ł

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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,

background image

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

background image

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

background image

Wyszukiwarka

Podobne podstrony:
Co się stało z poleceniem Uruchom, DOC
URODZI AM SI DOC
SI A DOC
KTO SI 1 DOC
Force URN NBN SI DOC B7ZTF10D
I STA O SI DOC
TEST2 ZESTAW1 POLECENIA doc
CO SI STA O Z MAM DOC
Que si, Que si Natalia Oreiro doc
MO E SI WYDAWA DOC
03175 O Mnie Si« Nie Martw VIRGIN doc
KTO SI CENI DOC
SI wstep
SI Slowniczek VIsem
europejski system energetyczny doc

więcej podobnych podstron