Практическое руководство. Просмотр содержимого сборок
Можно использовать 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)