Реферат: API Spying
Политика отображения
Два принципиально разных подхода:
Данные доступны в реальном времени (посредством какого-нибудь GUI).
Данные доступны после завершения исследуемого приложения (в файле на диске).
Оба подхода имеют свои плюсы и минусы: с точки зрения получения данных, очевидно, что первый обладает всеми возможностями второго (если уж данные отображаются, параллельно сохранять их в лог не проблема), а, с точки зрения влияния на исследуемое приложение, второй может получиться гораздо мягче, и в какой-то ситуации это может оказаться критичным. Кроме того, второй подход может оказаться значительно проще в реализации.
ПРИМЕЧАНИЕ Например, если данные можно в течение всего времени выполнения хранить в памяти, а запись на диск сделать только в самом конце (в DllMain). Или, чуть более интеллектуально, попытаться записывать/передавать данные только в те моменты, когда исследуемое приложение само обращается к диску. |
Но, поскольку первый подход гораздо эффектнее (real-time, on-line, и даже мультимедиа, если постараться, – все эти слова можно обоснованно употребить в пресс-релизе :) ), далее рассматривается в основном он.
Где хранить и как отображать статистику
Есть три варианта реализации «сбора и отображения»:
Данные хранятся и отображаются dll, внедрённой в исследуемое приложение.
Данные хранятся dll, внедрённой в исследуемое приложение, для отображения она пересылает их внешнему приложению.
И хранением, и отображением занимается внешнее приложение, dll просто пересылает ему данные по мере поступления.
Наиболее интересен последний вариант (рассматриваем отображение в реальном времени), так как за счёт выноса части логики во внешнее приложение dll получается относительно простой, в результате чего снижается риск случайно испортить что-нибудь в исследуемом приложении, упрощается отладка и повышается надёжность системы в целом.
Реализация
Ограничимся простым случаем:
Отслеживаем только вызовы функций, адреса которых исследуемое приложение получает через GetProcAddress.
Сохраняем только имена функций и модулей.
Отображаем данные в реальном времени. В качестве GUI выступает консоль. :)
Данные хранятся и отображаются во внешнем приложении.
Генерация функции-шпиона
Основную работу по генерации выполняют следующие несложные классы:
// Класс, позволяющий работать с относительными адресами. // Позволяет копировать относительные адреса, сохраняя их корректными. struct relative_address { relative_address() : value(0) {} // Корректнокопируетотносительныйадрес. relative_address(const relative_address& a) К-во Просмотров: 991
Бесплатно скачать Реферат: API Spying
|