.method public static void Main() cil managed
{
  .entrypoint
  .custom instance void [mscorlib]System.STAThread&ttribute::.ctor() =
( 01 00 00 00 )
// Code size 14 (Oxe)
.maxstack 8
IL_O0O0: nop
IL_0001: ldstr "Hello World"
IL_0006: call void [mscorlib] System.Console::WriteLine(string)
IL_000b: nop
IL_000c: nop
IL_000d: ret
) // end of method Module1::Main

Просмотреть код IL для любого скомпилированного приложения .NET очень легко. Необходимо лишь запустить программу дизассемблера (IL Disassembler), устанавливаемую вместе с Visual Studio и .NET SDK (Software Development Kit — набор инструментальных средств разработки программного обеспечения). Найдите исполняемый файл ildasm.exe в каталоге вроде с:\Program Files\Visual Studio 2005\SDK\v2 .0\Bin. После загрузки дизассемблера выберите в меню File(Файл) команду Open(Открыть) и затем любой DLL-или ЕХЕ-файл, созданный с помощью .NET.

Если вы будете терпеливы и логичны, то сможете довольно легко разобраться с кодом IL и выяснить, что он делает. Простота дизассемблирования кода IL может вызвать проблемы приватности и управления кодом, однако эти проблемы не являются препятствием для разработчиков ASP.NET, поскольку весь код ASP.NET хранится и выполняется на сервере. Поскольку клиент никогда не получает скомпилированный файл кода, у клиента нет возможности его дизасеемблирования. Если это является проблемой, воспользуйтесь "затемнителем" для усложнения кода. (Например, "затемнитель" может переименовать все переменные в групповые неосмысленные имена наподобие f__а__234). Visual Studio содержит упрощенную версию популярного "затемнителя" под названием Dotfuscator.

Ниже показано то же консольное приложение на Visual Basic:

Namespace HelloWorld
  Public Class TestClass
    Private Shared Sub Main(Ars() As String)
      Console.WriteLine("Hello World")
    End Sub
  End Class
End Namespace

Если скомпилировать это приложение и просмотреть код IL, то можно обнаружить, что каждая его строка идентична коду IL, который был сгенерирован версией С# утилиты. Хотя разные компиляторы могут иногда предлагать свои собственные оптимизации, по общему правилу ни одни язык .NET не превосходит какой-либо другой язык .NET, поскольку все эти языки обладают общей инфраструктурой. Эта инфраструктура формализована в CLS (Common Language Specification — Общая спецификация языка); более подробное описание ее можно найти чуть ниже во врезке "Общая спецификация языка".

предыдущая    следующая страница   оглавление

41

Hosted by uCoz