Skip to content

Instantly share code, notes, and snippets.

@stdray
Created March 17, 2017 22:52
Show Gist options
  • Select an option

  • Save stdray/5a1d400df6f101a4e4c583aba595bbd2 to your computer and use it in GitHub Desktop.

Select an option

Save stdray/5a1d400df6f101a4e4c583aba595bbd2 to your computer and use it in GitHub Desktop.
В .NET в инструментах типа Typemock Isolator имеется написан-
ный на C++ код, который подключается к COM-интерфейсу API про-
филирования в CLR и подписывается на обратные вызовы, относя-
щиеся к различным специальным событиям. Typemock даже владеет
патентом на эту технологию (см. http://bit.ly/typemockpatent), Прав-
да, компания, похоже, не требует его неукоснительного соблюдения,
иначе не было бы конкурентов в лице JustMock и Moles.
События JitCompilationStarted и SetILFunctionBody, являю-
щиеся членами COM-интерфейса ICorProї lerCallback2, позволяют
во время выполнения получать и изменять подлежащий исполнению
IL-код еще до его компиляции в двоичный. Этот IL-код можно под-
менить своим собственным. Typemock и подобные ему инструменты
добавляют IL-вставки до и после каждого метода, до которого могут
дотянуться. По сути дела, эти вставки обращаются к управляемому
коду на C# и проверяют, установил ли кто-то специальное поведение
для данного метода. Можно рассматривать эту процедуру как гло-
бальную аспектно-ориентированную сквозную проверку поведения
всех методов в вашем коде. Внедренные IL-вставки обращаются так-
же к различным точкам подключения (написанным на управляемом
языке, как правило на C#, и находящимся в самом сердце изолирую-
щего каркаса) – к каким именно, зависит от поведения, установлен-
ного пользователем API каркаса (например, «возбудить исключение»
или «вернуть поддельное значение»).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment