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


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

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

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

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

    ildasm Hello.exe
    

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

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

Пример

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

Imports System

Class MainApp
    Public Shared Sub Main()
        Console.WriteLine("Hello World using Visual Basic!")
    End Sub
End Class
using System;

class MainApp
{
    public static void Main()
    {
        Console.WriteLine("Hello World using C#!");
    }
}
using namespace System;

class MainApp
{
public:
    static void Main()
    {
        Console::WriteLine("Hello World using C++/CLI!");
    }
};

int main()
{
    MainApp::Main();
}

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

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Hello
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module Hello.exe
// MVID: {7C2770DB-1594-438D-BAE5-98764C39CCCA}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00600000

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

Директива

Описание

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

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

.publickeytoken <токен>

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

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

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

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

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

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

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

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

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

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

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

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

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

.corflags

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

Манифест сборки может содержать несколько различных директив, зависящих от ее содержимого. Расширенный список директив манифеста сборки содержится в документации ECMA, в том числе в частях "Раздел II. Определение метаданных и семантика" и "Разделе III. Набор инструкций CIL". Документация доступна через Интернет; см. статью ECMA C# и стандарты общеязыковой инфраструктуры на веб-сайте MSDN и документ Стандарт ECMA-335 - общеязыковая инфраструктура (CLI) на веб-сайте Ecma International.

См. также

Ссылки

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

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

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

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