Мне бы хотелось иметь доступ к байт-коду, который в данный момент выполняется или готовится к запуску, чтобы обнаружить определенные инструкции и выполнить определенные действия (в зависимости от инструкций). Короче говоря, я хотел бы контролировать байт-код, чтобы добавить контроль безопасности (см. EDIT # 1 для объяснения).
Возможно ли это? Я знаю, что есть некоторые платформы AOP, которые уведомляют вас о конкретных событиях, таких как доступ к полю или вызов метода, но я бы хотел пропустить этот дополнительный слой и просто посмотреть на весь байт-код сам на протяжении всего выполнения заявки.
Я уже посмотрел на следующие вопросы (... среди многих других;)):
Предварительная обработка C # - Методы обнаружения
Какие существуют инструменты для байт-кода CLR / .NET?
а также несколько платформ AOP (хотя и не очень подробно, так как кажется, что они не выполняют то, что мне нужно), и я знаком с Mono.Cecil.
Я ценю альтернативные предложения, но я не хочу вводить издержки инфраструктуры AOP, когда мне действительно нужен доступ к байт-коду без всего, что они добавляют сверху, чтобы сделать его более удобным для пользователя (. .. по общему признанию очень полезный материал, когда вы не хотите идти на низком уровне).
Спасибо:)
РЕДАКТИРОВАТЬ # 1 : больше подробностей о том, что я хочу сделать.
По сути, у меня есть приложение на C #, и мне нужно отслеживать инструкции, которые оно хочет выполнить, чтобы обнаружить операции чтения или записи в поля (операции Ldfld
и Stfld
) и вставьте некоторые инструкции до того, как произойдет чтение / запись: мне может понадобиться установить блокировки или, если это не удастся, прервать операцию. Также мне может потребоваться обновить журнал чтения (в случае чтения) или журнал записи (в случае записи).
На самом деле, я действительно хотел бы заменить инструкцию чтения / записи своим собственным кодом, но в случае неудачи, думаю, мне удастся просто вставить некоторые инструкции до и после .
РЕДАКТИРОВАТЬ # 2: PostSharp
Дейв предлагает использовать PostSharp
Проблема в том, что во время компиляции я до сих пор не знаю, какие классы мне нужно переплетать, поэтому я бы хотел отложить это до их загрузки. Как я понимаю, это не возможно с PostSharp? Пожалуйста, поправьте меня, если я ошибаюсь.
Я знаю, что PostSharp делает статическое плетение во время загрузки , но, по-видимому, "в настоящее время нет" готового "способа выполнить это" (заметьте, однако, что этот пост из PostSharp 1.5, возможно, это изменилось). Я думаю, это все равно будет проще, чем делать все самому, но я не могу найти никакой информации о том, как PostSharp поможет мне в этом случае. Наверное, спрошу на форумах PostSharp.