Поделиться через


Практическое руководство. Просмотр содержимого сборок

Обновлен: Ноябрь 2007

Можно использовать Дизассемблер MSIL (Ildasm.exe) для просмотра сведений промежуточного языка MSIL в файле. Если анализируемый файл является сборкой, то эти данные могут включать в себя атрибуты сборки, а также ссылки на другие модули и сборки. Эти данные полезны для определения того, является ли файл сборкой или частью сборки и имеет ли он ссылки на другие модули и сборки.

Отображение содержимого сборки с помощью Ildasm.exe

  • Введите ildasm <имя сборки> в командной строке. Например, следующая команда дизассемблирует сборку Hello.exe.

    ildasm Hello.exe
    

Просмотр сведений манифеста сборки

  • Дважды щелкните значок MANIFEST в окне дизассемблера MSIL.

Пример

Следующий пример начинается с простой программы "Hello, World". После компиляции программы используйте программу Ildasm.exe, чтобы декомпилировать сборку Hello.exe и просмотреть манифест сборки.

Imports System
Public Module modmain
   Sub Main()
      Console.WriteLine ("Hello World using Visual Basic!")
   End Sub
End Module 
using System;
class MainApp {
     public static void Main() {
        Console.WriteLine("Hello World using C#!"); 
    }
}
#using <mscorlib.dll>
using namespace System;
void main() {
   Console::WriteLine(L"Hello World using Managed Extensions!");  
}

Выполните команду ildasm.exe над сборкой Hello.exe и дважды щелкните значок MANIFEST в окне IL DASM, чтобы получить следующие выходные данные:

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )              // .z\V.4..
  .ver 1:0:2411:0
}
.assembly Hello
{
  // --- The following custom attribute is added automatically; do not uncomment. -------
  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool,
  //                                                                                bool) = ( 01 00 00 01 00 00 ) 
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module Hello.exe
// MVID: {58AD9DFD-63A6-462A-8AD5-42CBC95AA147}
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x03330000

В следующей таблице описаны все директивы в манифесте сборки Hello.exe, используемой в этом примере.

Директива

Описание

.assembly extern <имя сборки>

Определяет другую сборку, содержащую элементы, на которые имеются ссылки в текущем модуле (в этом примере — mscorlib).

.publickeytoken <маркер>

Определяет маркер действующего ключа сборки, на которую имеется ссылка.

.ver <номер версии>

Задает номер версии сборки, на которую имеется ссылка.

.assembly <имя сборки>

Задает имя сборки.

.hash algorithm <значение int32>

Задает используемый хэш-алгоритм.

.ver <номер версии>

Задает номер версии сборки.

.module <имя файла>

Задает имена модулей, составляющих сборку. В данном примере сборка состоит только из одного файла.

.subsystem <значение>

Указывает требуемую для программы среду приложения. В данном примере значение "3" указывает на то, что выполняемый модуль запускается на консоли.

.corflags

На настоящее время представляет собой зарезервированное поле метаданных.

Манифест сборки может содержать несколько различных директив, зависящих от ее содержимого. Расширенный список директив манифеста сборки содержится в документации ECMA, особенно в "Разделе II: Определение метаданных и семантика" и в "Разделе III: Набор инструкций CIL". Документация доступна в Интернете на страницах https://msdn.microsoft.com/net/ecma/ и http://www.ecma-international.org/publications/standards/Ecma-335.htm.

См. также

Основные понятия

Домены приложений и сборки

Руководства по работе с доменами приложений и сборками

Ссылки

Дизассемблер MSIL (Ildasm.exe)