Какие инструменты для байт-кода CLR/.NET существуют?


7

Я хорошо знаю инструменты Java для управления, генерации, декомпиляции байт-кода JVM (ASM, cglib, jad и т. Д.). Какие аналогичные инструменты существуют для байт-кода CLR? У людей есть манипуляции с байт-кодами для CLR?

2

Bytecode - это двоичный формат. Сборки .NET работают очень по-разному с точки зрения того, как они хранят инструкции по выполнению.

Вместо того, чтобы скомпилировать до структуры, подобной байт-коду, языки .NET скомпилированы в промежуточный язык (на самом деле это называется именно это - ИЛ).

Это читаемый человеком язык, который выглядит как объектно-ориентированная версия ассемблера.

Так что с точки зрения изучения или манипулирования ИЛ для отдельных сборок инструменты, такие как Reflector и ILDASM, позволяют вам удобно просматривать IL для любой сборки.

Манипуляция немного отличается, я бы предложил взглянуть на некоторые из инструментов АОП в пространстве .NET. Я также предлагаю взглянуть на Phoenix, который является проектом компилятора, который MS имеет в своих работах. У этого есть некоторые действительно прекрасные возможности компиляции после компиляции.

Если вы хотите узнать больше об инструментах .NET AOP, я бы предложил открыть другой вопрос (это целая другая червь из червей).

Есть также несколько книг, которые расскажут вам об ИА. Это не очень сложный язык для изучения.

+8

«Сетчатые сборки работают совсем по-разному с точки зрения того, как они хранят инструкции по выполнению», нет, они не ... все в конечном итоге скомпилировано до «двоичного формата», , Этот двоичный формат имеет соответствие от 1 до 1 с IL. 06 авг. 092009-08-06 09:53:04


4

ILDASM и Reflector Приходят на ум.


14

Отражатель всегда хорош, но Mono.Cecil - лучший инструмент, который вы можете запросить в целом. Это бесценно для управления CIL.


7

Mono.Cecil - отличный инструмент, такой как ASM. Это подпроект Mono и полностью открытый источник. Он даже обеспечивает better feature, чем System.Reflection.


1

NDepend позволяет выполнять статические анализы в .NET assembly (метрики кода, анализ зависимостей и т. Д.). NDepend очень полезно, чтобы получить обзор структуры ваших сборков .NET с использованием матрицы зависимостей, графиков зависимостей и показателей treemap visualizations.

Он также интегрирован с рефлектором: например, вы можете обнаруживать важные типы и методы в своих сборках, используя соответственно тип/метод Rank metric (кодовую метрику, похожую на Google Page Rank), и прыгать непосредственно из NDepend в Reflector в получить дизассемблированный код в C#, VB.NET и т. д.