Eu sou novo na programação .NET C #. Eu estou seguindo alguns livros. Diz-se que, em vez de compilá-lo diretamente no código binário (código nativo). O código de alto nível é convertido em idioma intermediário (chamado MSIL, também conhecido como CIL). Mas quando eu compilar, recebo um arquivo exe / Dll.
- Este MSIL / CIL está contido nesse arquivo exe / dll?
- Eu quero ver esse código de idioma intermediário. Apenas para sentir sua existência. Como vê-lo?
- Eles estão chamando esse arquivo exe / dll de an
assembly
. Eles estão usando essa "palavra chique" apenas para diferenciá-los dos arquivos exe / dll que contêm código binário (código nativo)?
c#
.net
assemblies
starblue
fonte
fonte
Respostas:
.text
seção do arquivo PE (executável portátil = * .exe ou * .dll). Mais informações podem ser encontradas aqui .Se também posso recomendar um bom livro sobre esse assunto, é o Expert .NET 2.0 IL Assembler de Serge Lidin. Ele é o cara que projetou o MSIL.
fonte
.text
sextion? Caso contrário, o que.text
contém? e o que há com as#
seções que eu pensei que são nomeadas começando com.
. Então, não deveria ser.strings
Uma das minhas maneiras favoritas de ver IL para um trecho de C # é usar a ferramenta gratuita LINQPad . Após digitar algum código e escolher "Instruções C #" na parte superior (ou "Programa C #", o que for adequado), clique no botão "IL" na área de entrada de código e você verá a IL gerada.
Usar o LINQPad para isso é muito mais conveniente do que carregar o Visual Studio ou executar o compilador na linha de comando, carregar o ILDASM e abrir o arquivo .il com um editor de texto.
fonte
Se você quiser online, o .NET Fiddle é excelente. Basta colar o seu código e clicar
View IL
na opção no canto superior direito.fonte
Outra opção: Use ReSharper
Visualização fonte / IL sincronizada: a linha de fundo azul esquerda corresponde ao bloco IL direito
No Visual Studio:
Oferece suporte à exibição sincronizada do código-fonte e da IL - quando você clica em uma instrução na fonte, o bloco correspondente na IL é destacado (e vice-versa). Exibe descrições para IL da Microsoft Developer Network e "Conjunto de instruções CIL (Common Intermediate Language)" da especificação padrão da ECMA.
consulte Visualizando o idioma intermediário (IL) na Ajuda do Resharper. A figura acima é da Ajuda do Resharper.
A opção gratuita é usar o Jetbrains dotPeek
veja também: "Explorando a linguagem intermediária (IL) com ReSharper e dotPeek", por Maarten Balliauw, 19 de janeiro de 2017 - Jetbrains Blog
fonte
PS: Como você está seguindo alguns livros, eu recomendo o CLR via C # .
fonte
Eu acredito que eles são chamados de "assemblies" porque um assembly é um conjunto de módulos, reunidos por um manifesto.
(fonte: microsoft.com )
Consulte Conteúdo da montagem para obter detalhes.
fonte
O sharplab é uma ferramenta online, excelente para casos de uso simples. Digite seu código à esquerda, IL aparece à direita.
fonte
Em muitos aspectos, os assemblies .NET são semelhantes aos pacotes de bytecode Java.
fonte
Passei algumas horas pesquisando a melhor ferramenta que me permitia exibir o código de IL diretamente no Visual Studio.
A única solução que encontrei até agora é o Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
funciona muito bem!
Caso contrário, a segunda melhor solução, mas sem a integração do visual studio, é o JetBrains dotPeek, que é incrível demais para ser honesto.
fonte
Sei que essa é uma pergunta antiga e prefiro qualquer uma das ferramentas acima. No entanto, em uma pitada, houve um visualizador MSIL na caixa com o Visual Studio desde pelo menos a Versão 2005.
A ferramenta é nomeada
ildasm.exe
e está localizada nas seguintes pastas após as instalações padrão do Visual Studio:Visual Studio 2005 "
C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"
Visual Studio 2008 "
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe
"Visual Studio 2010 "
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe
"Para obter mais informações, consulte: " Como: exibir o conteúdo do assembly " na Biblioteca do MSDN.
fonte
Pela minha experiência, a melhor fonte de conhecimento relacionado à IL é Andrew Troelsen, “Pro C # e .NET Platform”. A partir da 3ª edição, ele tem um capítulo realmente excelente (aproximadamente 50 páginas) sobre como entender a IL e até escrever seu próprio código e usar o ILAsm. Empreguei essas informações para investigar se existe herança múltipla no mundo .NET. Além disso, você pode tentar empregar alguns recursos muito interessantes na IL (por exemplo, filtragem de exceções que só existem no VB, mas não no C #).
Eu recomendo ler esse capítulo.
Eventualmente, o .NET Reflector é um padrão corporativo para investigar o código de assemblagens IL e o livro de Richter é definitivamente "coisas de leitura obrigatória". Mas de outros livros como os mencionados acima, você pode revelar coisas realmente úteis :)
Sim, cada assembly no mundo .NET possui algum código IL (junto com o manifesto) que pode ser visualizado através do Reflector ou ILDasm. Ainda mais, o Reflector pode mostrar o código otimizado em C # e VB. Isso significa que qualquer pessoa pode visualizar o código fonte de uma montagem e é por isso que em produtos comerciais são usados ofuscadores.
fonte
Se você deseja visualizar o idioma intermediário, tente baixar o JustDecompile da Telerik (que atualmente é gratuito, requer uma inscrição).
Arraste sua DLL e escolha
IL
na caixa suspensa na parte superior!fonte
Agora existe outra opção. Você pode fazer isso no VS Code com esta extensão criada com Roslyn. No momento, isso está limitado ao .NET Core .
fonte