Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Быстрый старт



"— Существуют во Вселенной попросы, на кото­рые нет ответов." Ф. Херберт. "Мессия Дюны".

ВС необычайно прост в управлении. NuMega специально отмечает это в прилагаемой документации. Иначе говоря, вас сильно ограничили в гибкости и возможностях контроля над приложением. Все за вас делает ВС!

Воистину непостижим такой подход на фоне Soft-Ice, который содержит весьма привлекательный для профессионала интерфейс. Но почему-то примени­тельно к ВС фирма-разработчик пошла другим путем, чем явно огорчила многих своих поклонников.

Остается использовать то, что дают. Запустим ВС и попробуем открыть какой-нибудь файл для анализа. Напомню, что поддерживаются только 32-разряд­ные \Уш32-файлы. Даже сегодня во время победного шествия Win32 API это ограничение все еще существенно, и существует немало 16-разрядных приложе­ний даже среди новых разработок.

Чтобы согласовать наши действия, предлагаю вам остановить свой выбор на примере BUG 1, находящемся в комплекте поставки ВС. При этом последний автоматически откроет окно "Program Transcript". В нем на протяжении всего сеанса работы будут отображаться такие события, как загрузка различных DLL, а также выводиться все отладочные сообщения. Это нас будет интересовать в последнюю очередь.

Если открыть руководство, то можно прочесть рекомендацию кликнуть по кнопке "run" (эдакая соблазнительная стрелочка, направленная вниз) и запустить программу. Но не будем спешить и полагаться только на руководство. В против­ном случае ВС будет мирно крутиться в фоне, ожидая ошибок или аварийных ситуаций. Естественно, что в изучаемом приложении таковых скорее всего не окажется и финальный рапорт будет пустым.

Это кстати, самая распространенная ошибка начинающих пользователей ВС. За неудачной попыткой следует разочарование или вопрос — а где же обещанные вызовы API?

На самом деле, как уже отмечалось, это и есть нормальная работа ВС, который в первую очередь предназначен для предотвращения ошибок и их локализации. Зададимся вопросом — а как это он делает? Полистав документацию, мы узнаем, что ВС перехватывает практически все ключевые функции и проверяет коррект­ность передаваемых им параметров. В противном случае он выводит в окно сообщение об ошибке.

Обратите внимание: ВС перехватывает функции, но не отмечает этот факт в протоколе, если вызов функции с его точки зрения корректен. Быть может, есть какой-то способ отображать все события вне зависимости от аварийности ситуации? Действительно, NuMega предусмотрела такую возможность. Конечно, средне­статистическому пользователю она не нужна и поэтому по умолчанию выключена. Чтобы исправить это, заглянем в установки программы (Program/Setting). Выбе­рем закладку "Event Reporting". Появится выбор из следующих пунктов:

Collect and report program event data

Report messages

Report pointer data for API

Report Hooks

Но последние три пункта будут недоступны, пока не установлена галочка "Collect and report program event data". Выбор остальных зависит от выбранной вами цели и исследуемой программы. Для перехвата функций API нужно устано­вить "Report pointer data for API", а также остальные — для перехвата сообщений или хуков.

Если теперь снова перейти на первую закладку "Error Detection", то будет возможность сохранить текущие настройки значениями по умолчанию. Это и в самом деле приятная возможность, особенно если планируется использовать ВС в основном для анализа чужих программ, а не по прямому назначению.

Вот теперь-то наконец мы нажмем "run". Если у вас меньше 128 мегабайт оперативной памяти, то вы услышите интенсивный звук прыгающих головок винчестера и откроется еще одно окно, которое показано ниже.

При этом в окне отображения событий появится единственный поток прило­жения (непопятно почему изображенный катушкой с зелеными нитками), а ниже — встретившаяся ошибка (умышленно допущенная разработчиками для демонст­рации возможностей ВС), но сейчас не будем акцентировать на ней внимания.

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

И где же ожидаемый нами протокол? Почему он по-прежнему выглядит пустым? Куда подевались все функции API, ведь наши ушки явно слышали, что в протокол записывалось что-то "тяжелое"! Не будем волноваться. На самом деле все сработало успешно, просто ВС по умолчанию не показывает в окне событий ничего, кроме ошибок и потоков.

Нажатием правой кнопки мыши, вызовем контекстное меню и установим галочку над пунктом "Show All Events". А затем "Expand All". Если все было сделано правильно, то в окне появится длинный перечень вызываемых функций.

Окно отображения событий Окно стека

Окно исходного текста

Прокрутим его немного вниз, пока не встретим вызов функции CreateWindo-wExA. Щелкнув по нему, мы увидим в окне стека, расположенном справа, все передаваемые параметры в удобочитаемом виде. Из этой информации можно узнать много интересного. Но важно уже то, что мы знаем, какой именно функцией было создано окно.

Теперь, если потребуется перехватить момент создания окна, у нас уже не возникнет вопрос, на какую функцию ставить Breakpoint. Вряд ли нужно гово­рить, что приложение может создать NagScreen множеством способов и вручную перебрать их все будет очень затруднительно. ВС же позволяет нам заглянуть "под капот" выполняемой программы, чтобы узнать, какие именно функции оно для этого вызывает.





Дата публикования: 2014-12-08; Прочитано: 246 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...