8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 82 83 84 85 86 87 88 ... 102

выше (то есть в более младших адресах) содержатся аргументы функции, ниже - ее локальные переменные

пАо". бережно хранит адрес возврата в материнскую функцию.

если здесь содержится иусор и обратная трассировка стека начинает характерно шуметь, с высокой степенью вероятности можно предположить, что мы инеем дело сшибкой "срыва стека", а возможно, и с попыткой атаки вашего компьютера

четыре первых параметра функции - именно столько параметров Доктор Ватсон отображает на экране: это достаточно жесткое ограничение — многие функции имеют десятки параметров и четыре параметра еще ни о чем не говорят: однако недостающие параметры легко вытащить из копии необработанного стека вручную, достаточно лишь перейти по указанному в поле FramePtr адресу

Func Name: имя функции (если только его возможно определить): реально отображает лишь имена функций, импортируемые из других DLL, поскольку встретить коммерческую программу, откомпилированную вместе с отладочной информацией, практически нереально

C012FFCO 77Е87903 0О0С0СО0 00000С0С 7-FDF000 С0000005 !<nosymbols> C312FFF0 00000000 00401040 00000C0G 00О000С8 03000100 kernel 32! SetUnnandl edExc ept i orFi Iter

; функции перечисляются в порядке их исполнения: самой последней исполнялась

: kernel32!SetUnhandledExceptionFilter - функция, обрабатывающая данное исключение

*—> Копия необработанного стека < ---*

: копия необработанного стека содержит стек таким, какой он есть. : очень помогает при обнаружении buffer overfull атак - весь shell-код, : переданный злоумышленником, будет распечатан Доктором Ватсоном. и вам : останется всего лишь опознать его (подробнее об этом рассказывается : в моей книге "Техника сетевых атак")

0012ff7C 00 00 00 00 00 00 00 00 - 39 10 40 00 00 00 СО 00.......9.0.....

CC12ff83 64 00 00 00 f4 10 40 00 - 01 00 00 00 d0 0е 30 00 d... .(а.......0.

S013C090 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ...............

М:300а0 00 00 00 00 00 00 ОС 00 - ОС 00 00 00 00 ОС СО 00 ............

*—> Таблица символов <----*

таблица символов содержит имена всех загруженных DLL вместе с именами импортируемых функций, используя эти адреса в качестве отправной точки, ны без труда сможем восстановить "перечень загруженных DLL"

ntdll.dii

7?F81106 0С0С0000 ZwAccessCheckB/Type 7?FCEFB0 0С0000С0 fltused

Продолжение &


264 Приложение А. Практические советы по восстановлению системы в боевых условия Листинг А.2 (продолжение) kernel32.dll

77Е81765 0000003d IsDebuggerPresent

77EDBF7A 00000000 VerSetConditicnMask

: итак, возвращаемся к таблице загруженных DLL

: (00400000 - 00406000) - зто. очевидно, область памяти, занятая самой программой : (77FB0000 - 77FFAO00) - зто KERNEL32.DLL ; (77ЕВ0000 - 77F37000) - это NTDDL.DLL

MICROSOFT VISUAL STUDIO DEBUG

При установке среды разработки Microsoft Visual Studio она регистрирует свой отладчик основным отладчиком критических ошибок по умолчанию. Это простой в использовании, но функционально ущербный отладчик, не поддерживающий даже такой банальной операции, как поиск hex-последовательности в оперативной памяти. Единственная «вкусность», отличающая его от продвинутого во всех отношениях Microsoft Kernel Debugger, — это возможность трассировки «упавших» процессов, выбросивших критическое исключение.

В опытных руках отладчик Microsoft Visual Studio Debugger способен творить настоящие чудеса, и одно из таких чудес — это возобновление работы приложений, совершивших недопустимую операцию и при нормальном течении событий аварийно завершаемых операционной системой без сохранения данных. В любом случае интерактивный отладчик (коим Microsoft Visual Studio Debugger и является) предоставляет намного более подробную информацию о сбое и значительно упрощает процесс выявления источников его возникновения.

Для ручной установки Microsoft Visual Studio Debugger основным отладчиком критических ошибок добавьте в реестр данные, представленные в листинге А.З.

Листинг А.З. Установка Microsoft Visual Studio Debugger основным отладчиком критических ошибок

[HKEY L0CAL MACHlNt\S0FIWARE\Microsoft\WindOws NT\CufentVersion\AeDebug] "AutO"="l"

"Debugger"="\,C:\\Prg FilesWMS VS\\Coanon\\MSDev98\\Bin\\msdev.exe\" -P Sid -e Vd" "UserDebuggerHotKey"=dword:00000000

В листинге A.4 представлена демонстрационная программа, вызывающая со общение о критической ошибке.

Листинг А.4. Демонстрационная программа, вызывающая сообщение о критической ошибке

//функция возвращает сумму п символов типа char

//если ей-передать null-pointer, она "упадет".

//хотя источник ошибки не в ней. а в аргументах.

//переданных материнской функцией


testichar *buf.ir.t n) nit a. sun:

for (a = 0:a < n: a++) sum <= buf[a]: // здесь возбуждается исключение return sum;

maic {

Refine П 100 char *buf =0:// инициализируем указатель на буфер

/* but = malloc(lOO):*/ // "забываем" выделить память, здесь ошибка tesUbuf. М):// передаем null-pointer некоторой функции

ОБИТАТЕЛИ СУМЕРЕЧНОЙ ЗОНЫ, ИЛИ ИЗ МОРГА В РЕАНИМАЦИЮ

Хотите узнать, как заставить приложение продолжить нормальную работу после появления сообщения о критической ошибке? Это действительно очень актуально. Представьте, что «рухнуло» приложение, содержащее уникальные и еще не сохраненные данные. По минимуму их придется набивать заново, по максимуму — они потеряны для вас навсегда. На рынке имеется некоторое количество утилит, способных решить эту задачу (взять те же Norton Utilities), но нх «интеллектуальность* оставляет желать лучшего, и в среднем они срабатывают один раз из десяти. В то же самое время ручная реанимация программы воскрешает ее в 75-90 % случаев.

Строго говоря, гарантированно восстановить работоспособность «обрушившейся» программы нельзя, равно как и невозможно выполнить «откат» действий, предшествующих ее обрушению. В лучшем случае вам удастся сохранить свои Данные на диске до того, как программа полностью потеряет нить управления и пойдет вразнос. Но и это неплохо!

Существует по меньшей мере три различных способа реанимации:

1-Принудительный выход из функции, возбудившей исключение.

2-«Раскрутка» стека с передачей управления назад.

3-Передача управления на функцию обработки сообщений. Усмотрим каждый из этих способов на примере приложения testt.exe, кото-

l4 можно скачать с сайта издательства.

Забегая вперед, отметим, что реанимации поддаются лишь те сбои, что вызваны Аритмическими, а не аппаратными ошибками (то есть сбоем оборудования). ecjih информация, хранящаяся в оперативной памяти, оказалась искажена в ре-3У1ьтате физического дефекта последней, то восстановить работоспособность Упавшего приложения, скорее всего, уже не удастся, хотя, если сбой не затронул Жизненно важные структуры данных, некоторая надежда на благополучный ис-Х°Д Все-таки есть.



0 ... 82 83 84 85 86 87 88 ... 102