Перехват методов серверных (x64) контекстов с использованием DynamicWrapperX

7 Comments

  1. bulpi

    Автор, конечно, гигант, но практическая ценность сомнительна.

    Reply
  2. МимохожийОднако

    Хотелось бы примеры практического использования

    Reply
  3. so-quest

    Оригинально. Респект за такое.

    Reply
  4. chessman

    Как, в общем-то, правильно отметили, «труд», в большей степени, представляет теоретический интерес.

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

    То, что касается общего модуля DWX_Информатор, как я уже упоминал, его можно использовать самостоятельно. Например, для создания более универсальных алгоритмов. Допустим, к нам в процедуру приехал Объект. Нам нужно вызвать его экспортный метод «Метод1()», но мы не знаем, есть ли он у Объекта. Кроме как через Попытка…Исключение, сейчас понять это нельзя (поправьте, если ошибаюсь). Выглядит это несколько коряво. Используя DWX_Информатор, это можно сделать.

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

    Reply
  5. sashocq

    Интересное исследование.

    Есть база КА 2.2. Периодически в ЖР проскакивают записи с непонятным именем события. Можно ли как-то с помощью этого DynamicWrapperX перехватывать каждый вызов ЗаписьЖурналаРегистрации() и залоггировать его контекст выполнения и значения параметров?

    Reply
  6. chessman

    (5) Александр, у меня сейчас нет физической возможности проверить это на x64, но на x32 перехват работает.

    Тут нужно понимать, что ловятся именно вызовы ЗаписьЖурналаРегистрации(), т.е. если в тексте модуля был вызван этот глобальный метод. Стандартная запись событий сюда не попадает.

    То, что касается контекста выполнения, то пока помочь не смогу, хотя сам по себе вопрос довольно актуальный.

    Чтобы заработал перехват в Вашем случае, нужно сделать отдельную сборку, поскольку речь идет о перехвате методов Глобальных контекстов. Сделать это не сложно, так что если интересно пишите.

    Reply
  7. sashocq

    (6) Владимир, именно это и нужно. Подозреваю, что где-то в коде неправильное имя события передаётся. Простой визуальный осмотр результатов поиска ЗаписьЖурналаРегистрации ничего не дал, т. к. ооочень много кода.

    Спасибо, пока добавлю в закладки на будущее. Сейчас слишком большая загрузка по проектам, а вопрос этот не критичный.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *