![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
"— Существуют во Вселенной попросы, на которые нет ответов." Ф. Херберт. "Мессия Дюны".
ВС необычайно прост в управлении. 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!