Domanda

Conosco bene gli strumenti Java per manipolare, generare, decompilare il bytecode JVM (ASM, cglib, jad, ecc.). Quali strumenti simili esistono per il bytecode CLR? Le persone effettuano manipolazioni bytecode per il CLR?

È stato utile?

Soluzione

Bytecode è un formato binario. Gli assembly .NET funzionano in modo abbastanza diverso in termini di modalità di archiviazione delle istruzioni di esecuzione.

Invece di compilare in una struttura simile a bytecode, i linguaggi .NET sono compilati in un linguaggio intermedio (in effetti, si chiama proprio questo - IL).

Questo è un linguaggio leggibile dall'uomo che assomiglia a una versione dell'assemblatore orientata agli oggetti.

Quindi, in termini di esame o manipolazione dell'IL per singoli assiemi, strumenti come Reflector e ILDASM consentono di visualizzare comodamente l'IL per qualsiasi assemblaggio.

La manipolazione è un po 'diversa, suggerirei di dare un'occhiata ad alcuni degli strumenti AOP nello spazio .NET. Suggerirei anche di dare un'occhiata a Phoenix, che è un progetto di compilazione che MS ha in cantiere. Ha alcune funzioni di manipolazione post-compilazione davvero interessanti.

Se vuoi saperne di più sugli strumenti .NET AOP, suggerirei di aprire un'altra domanda (che è tutta un'altra lattina di worm).

Ci sono anche diversi libri che ti insegneranno i dettagli di IL. Non è una lingua molto complicata da imparare.

Altri suggerimenti

Reflector è sempre buono, ma Mono.Cecil è lo strumento migliore che si possa desiderare nel complesso. È prezioso per manipolare CIL in qualsiasi modo.

Mono.Cecil è un ottimo strumento come ASM. È un sottoprogetto di Mono e totalmente open source. Fornisce anche funzionalità migliore di System.Reflection.

ILDASM e Reflector viene in mente.

NDepend consente di eseguire analisi statiche di assembly .NET (metriche di codice, analisi delle dipendenze, ecc.). NDepend è molto utile per ottenere una panoramica della struttura dei tuoi assiemi .NET utilizzando la matrice di dipendenza, i grafici delle dipendenze e le metriche delle treemap .

È inoltre integrato con Reflector: ad esempio è possibile rilevare i tipi e i metodi importanti negli assiemi utilizzando rispettivamente un Tipo / Metodo metrica di rango (una metrica di codice simile al rango di pagina di Google) e passa direttamente da NDepend a Reflector per ottenere il codice disassemblato in C #, VB.NET, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top