Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Підсистема дослідження в SoftICE.doc
Скачиваний:
0
Добавлен:
22.11.2019
Размер:
505.86 Кб
Скачать

Приклад1: (АСО-ОВП_№8_Дек2000)

Підсистема дослідження в SoftICE

1. Загальна інформація

Він дозволяє завантажувати й переглядати вихідні тексти отлаживаемых програм одночасно з відповідними ассемблерными інструкціями, виводити на екран значення регістрів процесора в будь-який момент часу виконання програми, переглядати таблиці глобальних і локальних дескрипторів, таблиці сторінок і т.д. При необхідності, виведена протягом сеансу роботи на екран дисплея інформація може бути збережена в log-файлі, що пізніше може бути переглянутий і відредагований в одному з текстових редакторів.

Отлаживаемая програма повинна бути відкомпільована й скомпонована відповідним чином, щоб у виконує файле, що, крім коду була присутня й символьна інформація. Утиліта символьного завантажника Symbol Loader (складова частина отладчика) витягає символьну інформацію з файлу, що виконує, і завантажує її разом з отлаживаемой програмою в SoftICE. Завантаження віртуальних драйверів отладчика SoftICE здійснюються з файлу autoexec.bat до завантаження операційної системи захищеного режиму (у цьому випадку Windows 95).

2. Приклад використання

Як приклад скористаємося найпростішим 32-розрядним додатком (виконує файл, що, themes.exe), що створює стандартний екран Windows і виводить на екран вікно, представлене на мал. 4

мал.4

Після завантаження в SoftICE нашої програми скористаємося командою proc для висновку на екран всіх процесів, завантажених у комп'ютер.

:proc

Process pProcess ProcessID Threads Context DefHeap DebuggeeCB

*Bitmap 815CC028 FFF8E3D7 00000001 C1030688 00470000 00000000

Loader32 815CD820 FFF8FBDF 00000001 C102F0A4 005D0000 00000000

Spool32 815BE904 FFFFCAFB 00000002 C101C6AC 00410000 00000000

Winword 815BEBE8 FFFFC817 00000001 C102F244 00400000 00000000

Internat 815BEE80 FFFFCD7F 00000001 C102F42C 00410000 00000000

Systray 815BCE28 FFFFEDD7 00000001 C102DCF4 00410000 00000000

Explorer 815B92E4 FFFFB11B 00000002 C102C27C 00440000 00000000

Mprexe 815B6ECC FFFF4D33 00000002 C10283B8 00510000 00000000

MMTASK 815B871C FFFFA4E3 00000001 C102C04C 00400000 00000000

MSGSRV32 815B5F40 FFFF7CBF 00000001 C1024524 00400000 00000000

KERNEL32 816B3270 FFCF118F 00000004 C1020830 00640000 00000000

Ми бачимо, що поряд із системними програмами й програмою Winword є присутнім і нашою програмою Bitmap.

Команда proc -x themes виводить на екран більше конкретні відомості про одну нашу програму.

:proc -x themes

Process Information for Bitmap at 815CC028

Type: 00000005 RefCount: 00000002 Unknown1: 00000000

pEvent: 816B3C04 TermStatus: 00000103 Unknown2: 00000000

DefaultHeap: 00470000 MemContext: C1030688

Flags: 00000000

pPSP: 0002A620 PSPSelector: 2DB7 MTEIndex: 0020

Threads: 0001 ThrNotTerm: 0001 Unknown3: 00000000

R0threads: 0001 HeapHandle: 815B4000 K16TDB: 2E26

MMFViews: 00000000 pEDB: 815D1204 pHandleTable: 815D107C

ParentPDB: 815CD820 MODREFlist: 815CD410 Threadlist: 815D157C

DebuggeeCB: 00000000 LHFreeHead: 00000000 Initial0ID: 00000000

&crtLoadLock: 815CC088 pConsole: 00000000 Unknown4: C002F858

ProcDWORD0: 000034CC ProcGroup: 815CD820 ParentMODREF: 815CD410

TopExFilter: 00000000 PriorityBase: 00000008 Heapownlist: 00470000

HHandleBlks: 00000000 Unknown5: 00000000 pConProvider: 00000000

wEnvSel: 21FF wErrorMode: 0000 pEvtLdFinish: 815D158C

UTState: 0000

Environment Database

Environment: 00580020 Unknown1: 00000000

CommandLine: 815D15AC C:\C_++_5\Teach\bitmap.exe

CurrentDir: 815CCEC8 C:\C_++_5\Teach

StartupInfo: 815CCE80 hStdIn: FFFFFFFF hStdOut: FFFFFFFF

hStdError: FFFFFFFF Unknown2: 00000001 InheritCon: 00000000

BreakType: 00000000 BreakSem: 00000000 BreakEvent: 00000000

BreakTheadId: 00000000 BrkHandlers: 00000000

Команда cpu виводить на екран уміст регістрів процесора.

:cpu

Processor 00 Registers

-і-і-і-і-і-і-і-і-і-і-і

CS:EIP=0137:00401108 SS:ESP=013F:0069FE04

EAX=00400000 EBX=815D15C6 ECX=815CCEDC EDX=815CC1AC

ESI=0040202C EDI=00000000 EBP=0069FE30 EFL=00000246

DS=013F ES=013F FS=2D8F GS=0000

CR0=80000013 PE MP ET PG

CR2=00401000

CR3=0085D000

CR4=00000000

DR0=00000000

DR1=00000000

DR2=00000000

DR3=00000000

DR6=FFFF0FF0

DR7=00000700

EFL=00000246 PF ZF IF IOPL=0

Добре видно, що тільки шість сегментних регістрів залишилися шестнадцатиразрядными. Всі інші регістри - тридцяти двох розрядні.

По команді gdt на екран виводиться вміст таблиці глобальних дескрипторів, що є загальної для всіх завантажених додатків.

:gdt

GDTbase=C0136658 Limit=01F7

Sel. Type Base Limit DPL Attributes

0008 Code16 00011CD0 0000FFFF 0 P RE

0010 Data16 00011CD0 0000FFFF 0 P RW

0018 TSS32 C000AE9C 00002069 0 P B

0020 Data16 C0136658 000001F7 0 P RW

0028 Code32 00000000 FFFFFFFF 0 P RE

0030 Data32 00000000 FFFFFFFF 0 P RW

003B Code16 C33F6800 000007FF 3 P RE

0043 Data16 00000400 000002FF 3 P RW

0048 Code16 0000DD60 0000FFFF 0 P RE

0050 Data16 0000DD60 0000FFFF 0 P RW

0058 Reserved 00000000 0000FFFF 0 NP

0060 Reserved 00000000 0000FFFF 0 NP

0068 TSS32 C0015E28 00000068 0 P

0070 Data32 00000000 FFFFFFFF 0 P RW

007B Data16 00000000 FFFFFFFF 3 P RO

0083 Data32 80001000 00000FFF 3 P RW

008B Code32 C0029689 FFFFFFFF 3 P RE ED

0093 Code32 C0029689 000000FF 3 P RE

009B Data32 00000000 FFFFFFFF 3 P RW

00A0 Code32 C0124EB0 00001000 0 P RE

00A8 Code32 C0124EA1 00001000 0 P RE

00B3 Data16 00000522 00000100 3 P RW

00B8 Data32 00000000 0000FFFF 0 P RW

00C3 Data16 C5CD3000 00008000 3 P RW

00C8 Code16 C12D8000 0000FFFF 0 P RE

00D0 Data16 C12D8000 0000FFFF 0 P RW

00D8 Data16 C11CD7D0 000000A2 0 P RW

00E0 Data16 C5CDB000 00003FFF 0 P RW

00EB Data16 000011D4 00000133 3 P RW

00F3 Data16 C000EA20 00000003 3 P RO

00F8 LDT 80091000 00003FFF 0 P

0103 Data16 00011BD0 000000FF 3 P RW

010B Data32 81AEA000 00000FFF 3 P RW

0113 Data32 821BB000 00000FFF 3 P RW

011B Data32 821EC000 00000FFF 3 P RW

0123 Data32 821ED000 00000FFF 3 P RW

012B Data32 82422000 00000FFF 3 P RW

0133 Data32 823EE000 00000FFF 3 P RW

013B Data32 823EF000 00000FFF 3 P RW

0143 Data32 8241F000 00000FFF 3 P RW

014B Data32 823F1000 00000FFF 3 P RW

0153 Data32 823F2000 00000FFF 3 P RW

015B Data32 823F7000 00000FFF 3 P RW

0160 Reserved 00000000 00000000 0 NP

016B Data32 823F9000 00000FFF 3 P RW

0170 Reserved 00000000 00000000 0 NP

0178 Reserved 00000000 00000000 0 NP

0180 Reserved 00000000 00000000 0 NP

018B Data32 82D64000 00000FFF 3 P RW

0193 Data32 82D30000 00000FFF 3 P RW

У першому стовпчику зазначені індекси дескрипторів, у другому стовпчику - їхній тип. Крім дескрипторів двох основних типів сегментів: командного (Code16 й Code32) сегмента й сегмента даних (Data16 й Data32) для додатків з відповідною розрядністю, ми бачимо також характерні саме для захищеного режиму дескриптор сегмента локальної таблиці дескрипторів (LDT) і сегменти стану завдання (TSS32). Наявність LDT, де містяться дескриптори сегментів однієї конкретної програми, свідчить про те, що одна із прикладних програм має власний адресний простір. За допомогою TSS забезпечується можливість перемикання між завданнями при організації операційною системою многозадачного режиму з паралельним виконанням декількох завдань. Потужним інструментом захисту окремих завдань друг від друга, надаваним мікропроцесором, є четырехуровневая система привілеїв. Її присутність видно в 5-й стовпчику, де зазначений рівень привілеїв відповідного сегмента. Нульовий рівень відповідає сегментам, використовуваним системними програмами, а 3-й - прикладними програмами типу Winword й Bitmap. У шостій графі аттрибутов зазначена присутність - Р (present) або відсутність - NP (not present) відповідного сегмента в оперативній пам'яті, а також наступні типи сегментів:

- RE - читання й виконання (сегменти команд);

- RW - читання й запис (сегмент даних);

- RO - тільки читання (сегмент даних);

- ED - сегмент даних з розширенням униз (сегмент стека);

- У - сегмент стану завдання

Команда ldt виводить на екран уміст таблиці локальних дескрипторів, розташованої згідно gdt за адресою 80091000. З огляду на значний обсяг цієї таблиці, наведемо як приклад лише деякі рядки, але всіх типів дескрипторів, які в ній можуть перебувати.

:ldt

LDTbase=80091000 Limit=3FFF

Sel. Type Base Limit DPL Attributes

00CC Task32 0000:000000D0 0 NP

00D7 Data16 80481200 00005ABF 3 P RW

00DF Data32 8052C660 FFFFFFFF 3 P RW

0127 Code16 80331920 0000423F 3 P RE

012F Data16 00020740 0000257F 3 P RW

0137 Code32 00000000 FFFFFFFF 3 P RE

013F Data32 00000000 0000FFFF 3 P RW ED

24DC Reserved 00000000 000024F0 0 NP

24E4 Reserved 00000000 000F23D8 0 NP

Крім уже відомих по таблиці gdt типів дескрипторів тут ми зустрічаємося з дескриптором шлюзу завдання (Task32), у цьому випадку тридцатидвухразрядной. Його наявність забезпечує можливість одного з варіантів перемикання між завданнями при роботі в многозадачном режимі.

Приклад2: (АСО-ОВП_№9_Дек2000)

Що таке SoftIce?

SoftIce складається з отладчика рівня ядра (kernel mode debugger) (властиво, це і є отладчик) і утиліти завантажник отладочной інформації (Symbol Loader). SoftIce - це універсальний отладчик, яким можна налагодити будь-який код, включаючи підпрограми переривання й драйвери вводу-висновку. Утиліта Symbol Loader завантажує отладочную інформацію для вашого модуля, дозволяє настроїти SoftIce, і дає можливість записати історію комманд (history buffer) у файл.

SoftIce сполучає в собі міць апаратного отладчика й зручність символьного, вона має наступні можливості:

  • Символьне налагодження 32-бітних додатків, налагодження драйверів пристроїв для WIN NT, драйверів для WIN95, Vx, 16-бітних програм для DOS й Windows.

  • Налагодження фактично будь-якого коду, включаючи підпрограми переривання й внутрішні підпрограми WIN 95 й WIN NT.

  • Установка крапок останова на операції читання/запису на згадку, читання/запису портів вводу-висновку, переривань.

  • Установка крапок останова на повідомлення Windows.

  • Установка крапок останова, що спрацьовують за певних умов (умовних крапок останова), і дій, які повинні відбутися при спрацьовуванні крапки останова.

  • І багато чого іншого ...

Symbol Loader дозволяє прочитати отладочную інформацію з отлаживаемых програм (EXE, DLL, Vx, 386, OCX) і завантажити її в отладчик, запустити ваш додаток й автоматично встановити крапку останова на крапку входу в програму, записати у файл протоколу налагодження.